思路
- 因为是大数,所以不能用int,long,long long来定义。要用字符串来存储。
- 首先先将两个字符串进行翻转,个位对齐。例如str1=“123459”,str2=“123”。翻转后变为:“954321"和"321”,这样可以实现位对齐计算。
- 依次进行位计算,计算位运算时要加上进位。求得的和%10为位值,/10为进位。
- 执行完以上步骤后再把字符串翻转过来
代码如下:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string s1, s2, s3;
cin >> s1 >> s2;
int max_size = max(s1.size(), s2.size());
//翻转字符串
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
s1.size() > s2.size() ? s2.resize(max_size, '0') : s1.resize(max_size, '0'); //补全0
int k = 0; //进位
for (int i = 0; i < max_size; ++i)
{
s3 += to_string((s1[i] - '0' + s2[i] - '0' + k) % 10); //求该位上的值
k = (s1[i] - '0' + s2[i] - '0' + k) / 10; //求进位
}
if (k)
cout << 1;
for (int i = s3.length()-1; i >=0; --i) {
cout << s3[i];
}
cout << endl;
system("pause");
return 0;
}
4912

被折叠的 条评论
为什么被折叠?



