大整数加法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011544909/article/details/79970910

在c语言中我们不方便对字符串进行增删处理,所以我们可以用c++的string类对大整数进行方便的计算。
法一:翻转倒序相加型,这样可以避免字符串一长一短,从最低位开始相加,每次一次把计算结果插入到string字符串的最前面。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string a,b,result;
    while(cin>>a>>b)
    {
        int carry=0;  //进位
        const size_t n=a.size()>b.size()?a.size():b.size();
        reverse(a.begin(),a.end());
        reverse(b.begin(),b.end());
        for(size_t i=0;i<n;i++)
        {
            int ai=i<a.size()?a[i]-'0':0;
            int bi=i<b.size()?b[i]-'0':0;
            int val=(ai+bi+carry)%10;
            carry=(ai+bi+carry)/10;
            result.insert(result.begin(),val+'0');
        }
        if(carry==1)
            result.insert(result.begin(),'1');
        cout<<result<<endl;
        result.clear();
    }

    return 0;
}

法二:将较短的数的0补齐,然后从最低位开始相加

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string a, b;
    while (cin >> a >> b)
    {
        int temp = 0, carry = 0;
        while (a.size()<b.size())
            a = "0" + a;
        while (a.size()>b.size())
            b = "0" + b;
        for (int i = a.size() - 1; i >= 0; i--)
        {

            temp = a[i] - '0' + b[i] - '0' + carry;
            a[i] = temp%10 + '0';
            if (temp / 10)
                carry = 1;
            else
                carry = 0;
        }
        if (carry)
            a = "1" + a;
        cout << a << endl;
    }
    return 0;
}
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页