原题链接:蓝桥杯算法提高VIP-大数加法
解题思路:
因为一半的类型长度已经不够题目要求了,所以我们要使用字符串来考虑:
首先把两个数分别读入两个字符串(str1,str2);接着把这两个字符串反序放到整型数组中(注意减'0');
然后对应相加,这里要注意进位,并且进位最大为1不可能超过1(9+9=18);和我们小学普通加法一样,置不过位数有点多让计算机来计算而已;
11233 + 2356 = ?
1 1 2 3 3
2 3 5 6
---------------
1 3 5 8 9
注意是重后向前加的。
注意事项:
参考代码:
#include <cstdio> #include <cstring> #include <string> #include <cmath> #include <iostream> #include <algorithm> using namespace std; int a[1001], b[1001], c[1001]; char str1[1001], str2[1001]; int main() { int len_str1, len_str2, len_max, k = 0; scanf("%s%s", str1, str2); len_str1 = strlen(str1); for(int i = 0, j = len_str1 - 1; j >= 0; ++i, --j) { a[i] = str1[j] -'0'; } len_str2 = strlen(str2); for(int i = 0, j = len_str2 - 1; j >= 0; ++i, --j) { b[i] = str2[j] -'0'; } len_max = len_str1 > len_str2 ? len_str1 : len_str2; for(int i = 0; i < len_max; ++i) { c[i] = (a[i]+b[i]+k)%10; k = (a[i]+b[i]+k)/10; } if(k) { c[len_max] = 1; printf("%d",1); } for(int i=len_max-1;i>=0;--i) { printf("%d",c[i]); } printf("\n"); return 0; }
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复