for(i=lensum-1;i>0;i--){ if(result[i]>9){ result[i]=result[i]%10; result[i-1] += 1; } }
注意实际的程序,会把9+4的结果存在result[0]中,8+3的结果存在result[1]中,上面的图是为了简化方便理解,其实也可以像图中那样存把循环控制的i由递增改成递减就可以了。
1 //#include"big.h" 2 //将整个加法写成一个方法,然后在main函数中调用。 3 #include
4 #include
5 #include
6 char * bigadd(char *adda,int lena,char *addb,int lenb){ //加法运算的方法。 7 int num='0',i,k,j,tmp; 8 for(i=0;i
//将字符编码的数字转换为对应的数,
9 adda[i]=adda[i]-num;
//例如6实际在字符串中存储的是54,
10 }
//减去0对应的48得到真实的6存储在字符数组中。
11
for(i=
0;i
12 addb[i]=addb[i]-num;
13 }
14
int lensum;
//求出结果数组的长度。
15 lensum = lena>lenb?lena:lenb;
16 lensum++;
17
char *result,final[BUFSIZ];
//result用于返回结果集,final数组用于整理结果集。
18 result=(
char*)
calloc(lensum,
1);
19
for(i=
0,j=
0;i
//循环的给每一位作加法
20 result[i]=adda[lena-i-
1]+addb[lenb-i-
1];
21 }
22
if(lena>lenb){
//使用判断将较大数的高位也写入结果数组
23
for(i=lenb;i
24 result[i]=adda[lena-i-
1];
25 }
26 }
27
if(lenb>lena){
28
for(i=lena;i
29 result[i]=addb[lenb-i-
1];
30 }
31 }
32
for(k=
0;k
1;k++){
//整理结果数组的每一位,满10进一。
33
if(result[k]>
9){
34 tmp=result[k]/
10;
35 result[k]=result[k]%
10;
36 result[k+
1] += tmp;
37 }
38 }
39 j=
0;
40
if(result[lensum-
1]!=
0){
//去掉前前导0将结果处理后写到final数组中。
41 final[j]=result[lensum-
1]+
'0'; j++;
43 }
44
for(i=lensum-
2;i>=
0;i--){
45 final[j++]=result[i]+
'0';
46 }
47 result=final;
//再把result指针指向final数组中,并返回result指针。
48
return result;
49 }
50
int main(){
//利用main测试方法,用puts打印结果。
51
int lena,lenb;
52
char *result,sa[BUFSIZ],sb[BUFSIZ];
53
scanf(
"%s",sa);
54
scanf(
"%s",sb);
55 lena=
strlen(sa);
56 lenb=
strlen(sb);
57 result=bigadd(sa,lena,sb,lenb);
58
puts(result);
59
60 }
下篇介绍大数减法。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206982.html原文链接:https://javaforall.net
