题解 | #高精度整数加法#
高精度整数加法
https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6?tpId=37&tags=&title=&difficulty=0&judgeStatus=0&rp=1&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D37%26type%3D37
/*
思路:用字符串来模拟加法运算, 注意进位情况的考虑,
小技巧:短字符串前面补0的操作
*/
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1, str2;
cin >> str1 >> str2;
int len1 = str1.length();
int len2 = str2.length();
// 两个整数位数不一致,短的在前面补0
int diff = 0;
if(len1 < len2){
diff = len2 - len1;
for(int i = 0; i < diff; i++){
str1 = '0' + str1;
}
}else {
diff = len1 - len2;
for(int i = 0; i < diff; i++){
str2 = '0' + str2;
}
}
reverse(str1.begin(), str1.end());
reverse(str2.begin(), str2.end());
len1 = str1.length();
len2 = str2.length();
int carry = 0;
string ans;
int i = 0, j =0;
for(; i < len1 && j < len2; i++,j++){
int sum = (str1[i] - '0') + (str2[j] - '0') + carry ;
if( sum >= 10){
carry = 1;
ans += to_string(sum%10);
}else{
carry = 0;
ans += to_string(sum);
}
}
if(carry){
ans += to_string(carry);
}
reverse(ans.begin(), ans.end());
cout << ans << endl;
return 0;
}
// 64 位输出请用 printf("%lld")
字符串操作 文章被收录于专栏
字符串操作


