1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 大数运算(2)——大数加法

大数运算(2)——大数加法

时间:2020-03-29 11:51:35

相关推荐

大数运算(2)——大数加法

/*大数加法的中心思想就是:模拟人工列竖式算加法的方法。先从最低位开始相加,判断是否进1,一直到最高位。

例如:

求12545642233+278545的和,该怎么算?

是这样的:

3 3 2 2 4 6 5 4 5 2 1 0

+ 2 7 8 5 4 5 0 0 0 0 0 0

————————————————

5 //不进位,继续算下一位

0 //进位为1,并储存其各位数0

1 //2+8=10,10+1=11,同样,进位为1,并储存其各位数1

8 //不进位,继续算下一位

————————>

由低位向高位相加计算,注意判断是否进位!计算结束后,注意判断最后所得数组的长度,并去掉前导0。

下面是C语言代码实现:

#include<stdio.h> #include<string.h> int x[100]={0},y[100]={0},z[105]={0};//将数组元素全部初始化为0 int main() { char a[100],b[100];//通过字符串对大数进行输入并储存 int len1,len2,len; while(scanf("%s %s",a,b)) { int i,j=0,k=0; len1=strlen(a); len2=strlen(b); for(i=len1-1;i>=0;i--)//将两个字符串中的字符转化为数字,并倒序储存到数组中,即字符串为123456,则数组为654321 { x[j]=a[i]-'0'; j++; } for(i=len2-1;i>=0;i--) { y[k]=b[i]-'0'; k++; } if(len1>len2) len=len1; else len=len2; i=0;//从最低位(个位)开始进行计算 int m=0; for(i=0;i<len;i++) { z[i]=(x[i]+y[i]+m)%10;//将所得数的个位存到数组z[i]中去 if((x[i]+y[i]+m)>=10) m=1; else m=0; } if((x[i-1]+y[i-1]+m)>=10)//判断运算的最大位的和是否>=10 z[i]=1; else i=i-1; for(;i>=0;i--)//到序输出数组 printf("%d",z[i]); printf("\n"); } return 0; }

另外:

有时,你可能会遇到大数,但他是小数,例如125454521564564.56456132145645这样的,所以可以以小数点为界限,进行相加减。*/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。