信息學(xué)奧賽(C++)高精度加法程序分析
為什么需要高精度計(jì)算?
計(jì)算機(jī)語言中用于存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)類型存儲(chǔ)的數(shù)大小有限制(任何數(shù)據(jù)類型都有一定的表示范圍),如果存放了超出了數(shù)據(jù)類型允許的范圍的數(shù),會(huì)出現(xiàn)數(shù)據(jù)“溢出”,從而導(dǎo)致出錯(cuò)。
高精度計(jì)算包括加法、減法、乘法、除法。
數(shù)據(jù)的接收與存儲(chǔ):(用字符數(shù)組)
例如:輸入兩個(gè)正整數(shù),輸出它們的和
思路:計(jì)算方法同小學(xué)數(shù)學(xué)老師教的豎式運(yùn)算一致。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char a1[100],b1[100];//用字符串來存儲(chǔ)輸入的數(shù)據(jù)
int a[100],b[100],c[100],lena,lenb,lenc,x,i;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));//把數(shù)組a,b,c元素初始化為0
//menset(s,v,n)函數(shù)是內(nèi)存賦值函數(shù),用來給某一塊內(nèi)存空間進(jìn)行賦值的
//包含在<string.h>頭文件中,可以用它對(duì)一片內(nèi)存空間逐字節(jié)進(jìn)行初始化
//s可以是數(shù)組名。也可以是指向某一段內(nèi)存的指針
//v是要填充的值
//n是要填充的字節(jié)數(shù)
//注意:使用menset()函數(shù)對(duì)char以外的數(shù)組類型進(jìn)行,只能初始化為0或者-1
gets(a1);//輸入加數(shù)
gets(b1);
lena=strlen(a1);//計(jì)算輸入的加數(shù)的位數(shù)
lenb=strlen(b1);
for(i=0;i<=lena-1;i++)
a[lena-i]=a1[i]-48;//加數(shù)放入a數(shù)組
for(i=0;i<=lenb-1;i++)
b[lenb-i]=b1[i]-48;//加數(shù)放入b數(shù)組
lenc=1;
x=0;
while(lenc<=lena||lenc<=lenb)
{
c[lenc]=a[lenc]+b[lenc]+x;
x=c[lenc]/10;
c[lenc]%=10;
lenc++;
}
c[lenc]=x;
if(c[lenc]==0)//尋找高位
lenc--;
for(i=lenc;i>=1;i--)//從高位到低位輸出
cout<<c[i];
cout<<endl;
return 0;
?}