题解 | #高精度整数加法#

高精度整数加法

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;
}
全部评论

相关推荐

牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务