【描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【样例输入】
22222222222222222222
33333333333333333333
【样例输出】
5555555555555555555
【参考程序】
C语言版本
- # include <cstdio>
- # include <cstring>
- int main()
- {
- char s1[205], s2[205];
- scanf("%s", &s1);
- scanf("%s", &s2);
- int len1 = strlen(s1);
- int len2 = strlen(s2);
- int n1[205] = { 0 }, n2[205] = { 0 }, ans[205] = { 0 };
- for (int i = 0; i < len1; i++)
- {
- n1[i] = s1[len1 - i - 1] - '0';
- }
- for (int i = 0; i < len2; i++)
- {
- n2[i] = s2[len2 - i - 1] - '0';
- }
- int carry = 0;//进位
- int i = 0;
- while (i < len1 || i < len2)
- {
- int a = n1[i] + n2[i] + carry;
- carry = a / 10;
- ans[i] = a % 10;
- i++;
- }
- ans[i] = carry;
- while (ans[i] == 0 && i > 0)
- {
- i--;
- }
- for (int j = i; j >= 0; j--)
- {
- printf("%d", ans[j]);
- }
- return 0;
- }
C++版本
- # include<iostream>
- # include<string>
- using namespace std;
- int main()
- {
- string s1, s2;
- cin >> s1 >> s2;
- int len1 = s1.size();
- int len2 = s2.size();
- int n1[205] = { 0 }, n2[205] = { 0 }, ans[205] = { 0 };
- for (int i = 0; i < len1; i++)
- {
- n1[i] = s1[len1 - i - 1] - '0';
- }
- for (int i = 0; i < len2; i++)
- {
- n2[i] = s2[len2 - i - 1] - '0';
- }
- int carry = 0;//进位
- int i = 0;
- while (i < len1 || i < len2)
- {
- int a = n1[i] + n2[i] + carry;
- carry = a / 10;
- ans[i] = a % 10;
- i++;
- }
- ans[i] = carry;
- while (ans[i] == 0 && i > 0) // i必须大于零,有可能输出的只有一个0
- {
- i--;
- }
- for (int j = i; j >= 0; j--)
- {
- cout << ans[j];
- }
- return 0;
- }