原题链接:蓝桥杯算法提高VIP-大数加法
#include <iostream> #include <cstdlib> #include <cmath> #include <deque> #include <algorithm> #include <numeric> #include <iterator> #include <sstream> #include <iomanip> #include <vector> #include <string.h> #include <string> using namespace std; void Add(char *str1, char *str2, char *str3)//大数的加法 { // str3 = str1 + str2; int i, j, i1, i2, tmp, carry; int len1 = (int)strlen(str1), len2 = (int)strlen(str2); char ch; i1 = len1 - 1; i2 = len2 - 1; j = carry = 0; for (; i1 >= 0 && i2 >= 0; ++j, --i1, --i2) { tmp = str1[i1] - '0' + str2[i2] - '0' + carry; carry = tmp / 10; str3[j] = tmp % 10 + '0'; } while (i1 >= 0) { tmp = str1[i1--] - '0' + carry; carry = tmp / 10; str3[j++] = tmp % 10 + '0'; } while (i2 >= 0) { tmp = str2[i2--] - '0' + carry; carry = tmp / 10; str3[j++] = tmp % 10 + '0'; } if (carry) { str3[j++] = carry + '0'; } str3[j] = '\0'; for (i = 0, --j; i < j; ++i, --j) { ch = str3[i]; str3[i] = str3[j]; str3[j] = ch; } return ; } const int MAXSIZE = 1001; int main() { char str1[MAXSIZE], str2[MAXSIZE], str3[MAXSIZE]; scanf("%s %s", str1, str2); if (strcmp(str1, "0")) { memset(str3, '0', sizeof(str3)); Add(str1, str2, str3); printf("%s\n", str3); } else { if (strcmp(str2, "0")) { printf("%s\n-%s\n0\n0\n", str2, str2); } else { printf("0\n0\n0\n0\n"); } } return 0; }
解题思路:
注意事项:
参考代码:
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复