资源描述:
《信息学奥赛一本通算法(C++版)基础算法:高精度计算.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、信息学奥赛一本通算法(C++版)基础算法:高精度计算高精度加法(大位相加)#includeusingnamespacestd;intmain(){chara1[100],b1[100];inta[100],b[100],c[100];//a,b,c分别存储加数,加数,结果intlena,lenb,lenc,x,i;memset(a,0,sizeof(a));//数组a清零memset(b,0,sizeof(b));//数组b清零memset(c,0,sizeof(c));//数组c清零//gets(a1);//gets(b1);//get
2、char();while(scanf("%s%s",&a1,&b1)!=EOF){lena=strlen(a1);lenb=strlen(b1);for(i=0;i<=lena;i++)a[lena-i]=a1[i]-'0';//将数串a1转化为数组a,并倒序存储//a[i]=a1[lena-i-1]-48;for(i=0;i<=lenb;i++)b[lenb-i]=b1[i]-'0';//将数串a1转化为数组a,并倒序存储//b[i]=b1[lenb-i-1]-48;lenc=1;//lenc表示第几位x=0;//x是进位while(lenc<=lena
3、
4、lenc
5、<=lenb){c[lenc]=a[lenc]+b[lenc]+x;//第lenc位相加并加上次的进位x=c[lenc]/10;//向高位进位c[lenc]%=10;//存储第lenc位的值lenc++;//位置下标变量}c[lenc]=x;if(c[lenc]==0)lenc--;//处理最高进位for(i=lenc;i>=1;i--)cout<usingnamespacestd;intmain(){charn[256],n1[256],n2
6、[256];inta[256],b[256],c[256];intlena,lenb,lenc,i;memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));while(scanf("%s%s",&n1,&n2)!=EOF)//n1为被减数,n2为减数{if(strlen(n1)7、
8、(strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0))//strcmp()为字符串比较函数,当n1==n2,返回0;n1>n2时,返回正整数;n19、数{精选strcpy(n,n1);//将n1数组的值完全赋值给n数组strcpy(n1,n2);strcpy(n2,n);//处理被减数和减数时,交换被减数和减数cout<<"-";//交换了减数和被减数,结果为负数}lena=strlen(n1);lenb=strlen(n2);for(i=0;i<=lena;i++)a[lena-i]=(int)(n1[i]-'0');//被减数放入数组a中for(i=0;i<=lenb;i++)b[lenb-i]=(int)(n2[i]-'0');//减数放入数组b中i=1;while(i<=lena
10、
11、i<=lenb){if(
12、a[i]1))lenc--;//最高位的0不输出for(i=lenc;i>=1;i--)cout<