#include<stdio.h> int main(void) { ?? ?int a[1001];? ? 储存第一个数字,本处设置位数可达1000位 ?? ?int b[1001];? ??储存第二个数字,本处设置位数可达1000位 ?? ?int c[1001];? ? 储存结果,本处设置位数可达1000位 ?? ?char d[1001];? 通过字符的形式储存第一个数各位上的数 ?? ?char e[1001];??通过字符的形式储存第二个数各位上的数 ?? ?char m; ?? ?char n; ?? ?int i=1,j=1,I,J;? ?细节部分,从数组的【1】开始存储数字,留下【0】用于计算时的进位。 ?? ?int M,N,item; ?? ?for(I=0;I<=1000;I++) ?? ?{ ?? ??? ?a[I]=b[I]=c[I]=0;????? 先对存储数字的数组全部赋值0。 ?? ?} ?? ?scanf("%c",&m);?? ?? ? while(m!=' ')?????????? 用于检测空格符来停止第一个数的输入 ?? ?{ ?? ??? ?d[i]=m; ?? ??? ?i++; ?? ??? ?scanf("%c",&m); ?? ?} ?? ?scanf("%c",&n);???????? ?? ? while(n!='\n')?? ???????用于检测回车符来停止第二个数的输入 ?? ?{ ?? ??? ?e[j]=n; ?? ??? ?j++; ?? ??? ?scanf("%c",&n); ?? ?} ?? ?for(I=1;I<=i-1;I++) ?? ?{ ?? ??? ?a[I]=(int)d[I]-48;??? ?
(int)+? 字符可以将字符转化为ASCII的形式用来计数,‘0’的ASCII比0大48,所以转化后减去48可以转化为数字形式,再存储于整型数组中。 ?? ?} ?? ?for(J=1;J<=j-1;J++) ?? ?{ ?? ??? ?b[J]=(int)e[J]-48; ?? ?} ?? ?int max=i-1; ?? ?if((j-1)>max) max=j-1; ?? ? ?? ?if(i<j) ?? ?{ ?? ??? ?for(I=1;I<=j-i;I++) ?? ??? ?c[I]=b[I];? ?? ??? ?for(I=1;I<=i-1;I++) ?? ??? ?{ ?? ??? ??? ?c[I+j-i]=a[I]+b[I+j-i]; ?? ??? ?} ?? ?} ?? ?else if(i>j) ?? ?{ ?? ??? ?for(I=1;I<=j-1;I++) ?? ??? ?{ ?? ??? ??? ?c[I+i-j]=b[I]+a[I+i-j]; ?? ??? ?} ?? ??? ?for(I=1;I<=i-j;I++) ?? ??? ?c[I]=a[I]; ?? ?} ?? ?else ?? ?{ ?? ??? ?for(I=1;I<=i-1;I++) ?? ??? ?c[I]=a[I]+b[I]; ?? ?}
绿色字体理解见图:? ??
for(I=max;I>=1;I--) ?? ?{ ?? ??? ?c[I-1]=c[I-1]+(c[I]/10); ?? ??? ?c[I]=c[I]%10; ?? ?}
蓝色字体理解见图:
?? ?if(c[0]!=0) ?? ?{ ?? ??? ?for(I=0;I<=max;I++) ?? ??? ?{ ?? ??? ??? ?printf("%d",c[I]); ?? ??? ?} ?? ?}else ?? ?{ ?? ??? ?for(I=1;I<=max;I++) ?? ??? ?{ ?? ??? ??? ?printf("%d",c[I]); ?? ??? ?} ?? ?} ?? ? ?? ? ?? ?return 0; }
?若反应良好,作者将在下周公布包含负数计算的程序,本次先公布正整数相加的程序,希望广大码友在留言区提供更多思路给与作者,大家一起进步!我很菜的,呜呜呜~
?
|