大整数加法

在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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值