题目描述:
输入两个用字符串表示的整数,求它们所表示的数之和。
字符串的长度不超过10000。
本题含有多组样例输入。
输入描述:
输入两个字符串。保证字符串只含有'0'~'9'字符
输出描述:
输出求和后的结果
示例:
输入:
9876543210
1234567890
输出:
11111111100
解题思路:
本题通过字符串操作实现超高精度的整数加法。首先输入两个字符串,并判断长短,长字符串为被加数,短字符串为加数;设置进位符,按长字符串倒序开始计算,当短字符串当前位大于等于0时,说明当前处于加法阶段,若两数相加大于10,则进位,刷新result字符串;当加法结束后,还要考虑进位,直到进位完全结束,将剩下的长字符串字符补位;最后别忘了分析下进位符状态,若为true,说明长字符串最高位数字还要进一下位,即前面多个1,完成。
测试代码:
#include <iostream> #include <string> using namespace std; string add(string s1, string s2) { string result,Long,Short; // 长+短 if (s1.size() > s2.size()) { Long = s1; Short = s2; } else { Long = s2; Short = s1; } int j = Short.size() - 1; //进位符 bool carry = false; for (int i = Long.size() - 1; i >= 0; --i) { // 加法阶段 if (j >= 0) { int temp; if (carry) { temp = int(Long[i] - '0') + int(Short[j] - '0') + 1; } else { temp = int(Long[i] - '0') + int(Short[j] - '0'); } if (temp < 10) { result = char(temp + '0') + result; carry = false; } else { carry = true; temp -= 10; result = char(temp + '0') + result; } } // 进位阶段 else if (carry) { int temp = int(Long[i] - '0') + 1; if (temp < 10) { result = char(temp + '0') + result; carry = false; } else { carry = true; temp -= 10; result = char(temp + '0') + result; } } // 补数阶段 else { result = char(Long[i]) + result; } --j; } // 若最后一次操作有进位符的话,说明最终字符串还要在前面加个1,进位 if(carry) { result="1"+result; } return result; } int main() { string s1, s2; while (cin >> s1 >> s2) { cout << add(s1, s2) << endl; } return 0; }