题解 | #高精度整数加法#
高精度整数加法
http://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
#include<bits/stdc++.h> using namespace std; int main() { string num1,num2; //分别存放两个用字符串表示的整数 while(cin>>num1>>num2) { auto it1=num1.rbegin(),it2=num2.rbegin(); //两个指针分别指向每个字符串的最后一个字符 string sum; //存放求和结果的字符串 int quotient = 0; //商,同时用来记录进位 while(it1!=num1.rend() && it2!=num2.rend()) { //从个位开始对两个字符串进行相加 int a = *it1-'0'+*it2-'0'+quotient; //当前位要加上之前一位的进位 int remainder = a%10; //余数,存放当前位的数字 quotient = a/10; //商,1代表有进位,0代表无进位 sum.push_back(remainder + '0'); //添加该字符,这里我们是压栈的方式添加的字符,等运行结束后,我们只需要reverse逆序一下字符串就可以了 it1++; //指针前移一位 it2++; //指针前移一位 } while(it1!=num1.rend()) { //如果字符串1的长度>字符串2的长度,那么对字符串1继续进行运算 int a = *it1 -'0' + quotient; //当前位加上之前的进位 int remainder = a%10; //余数,存放当前位的数字 quotient = a/10; //商,1代表有进位,0代表无进位 sum.push_back(remainder + '0'); //添加该字符 it1++; //指针前移一位 } while(it2!=num2.rend()) { //如果字符串2的长度>字符串1的长度,那么对字符串2继续进行运算 int a = *it2 -'0' + quotient; //当前位加上之前的进位 int remainder = a%10; //余数,存放当前位的数字 quotient = a/10; //商,1代表有进位,0代表无进位 sum.push_back(remainder + '0'); //添加该字符 it2++; //指针前移一位 } if(quotient) //如果运算结束,还有一个进位1,那么再添加一个字符'1' sum.push_back(quotient + '0'); reverse(sum.begin(), sum.end()); //翻转该字符串 cout<<sum<<endl; //输出 sum.clear(); //字符串sum清空 } return 0; }