题解 | #高精度整数加法#
高精度整数加法
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")
字符串操作 文章被收录于专栏
字符串操作