原题链接:川哥的吩咐
解题思路:
详见代码,不懂可以留言偶
注意事项:
每次循环完成后都要清空数组。
参考代码:
//大数求和,所以必须用字符串解决计算 #include <stdio.h> #include <string.h> int main() { char a[1000],b[1000]; //保存两个大数 int i,t1,t2,a1[1000]={0},b1[1000]={0},a2,b2; // 注意将两个数组初始化全为0 while(scanf("%s%s",a,b)!=EOF) { a2=strlen(a); //计算两个数组的长度 b2=strlen(b); if(a2>b2) t1=a2; //保存最长的数组 else t1=b2; t2=t1; for(i=0;i<a2;i++,t1--) // 因为求加法,所以在数组中储存的数必须倒着想加,也方便进位 a1[t1]=a[a2-1-i]-'0'; //用AS码值将字符数字转化为数字储存在数组中 for(t1=t2,i=0;i<b2;i++,t1--) b1[t1]=b[b2-1-i]-'0'; for(i=t2;i>=0;i--) //因为有可能加的时候溢出来所以又多了一位 { a1[i]+=b1[i]; //两数相加 注意逢十进一 if(a1[i]>=10) { a1[i]-=10; a1[i-1]++; } } if(a1[0]!=0) //考虑到第一个数可能为零 for(i=0;i<=t2;i++) printf("%d",a1[i]); else for(i=1;i<=t2;i++) printf("%d",a1[i]); printf("\n"); memset(a1,0,sizeof(a1)); //调用该函数时需要引用头文件string.h, memset(b1,0,sizeof(b1)); //清空数组memset(a,0,sizeof(a)); } return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复