HDOJ-A+B问题-大数处理

题意: 给出两个长整型A,B,要求计算A+B的值。

输入要求:有n组数据输入。


思路: 大数处理,对A,B逆序处理,使其对位且从低位开始运算;设立变量保存进位情况;求得结果后再逆序使得结果顺序为高位至低位。

代码:

/**
  HDOJ 大整数的加法
*/
#include <bits/stdc++.h>
using namespace std;
const int maxn = 63355;
/**长整形加*/
string addBigNum(string a,string b){
     reverse(a.begin(),a.end());   //逆序处理从低位开始加
     reverse(b.begin(),b.end());
     int radix = 0,i = 0;
     string s = "";
     for(i = 0;i<a.length()&&i<b.length();i++){
            int k = (a[i]-'0'+b[i]-'0'+radix)%10;   //位置数
            radix = (a[i]-'0'+b[i]-'0'+radix)/10;  //进位数
            s+=(k+'0');
     }
     if(i<a.length()){  //a字符长
            while(i<a.length()){
                int k = (a[i]-'0'+radix)%10;   //位置数
                radix = (a[i]-'0'+radix)/10;  //进位
                s+=(k+'0');
                i++;
            }
     }
     if(i<b.length()){ //b字符长
           while(i<b.length()){
                int k = (b[i]-'0'+radix)%10;   //位置数
                radix = (b[i]-'0'+radix)/10;  //进位
                s+=(k+'0');
                i++;
          }
     }
     if(radix) s+=(radix+'0'); //最后进位
     return s;
}
int main(){
    int n,index = 1;
    cin>>n;
    while(index<=n){
        string a,b;
        cin>>a>>b;
        string s = addBigNum(a,b);
        reverse(s.begin(),s.end());  //逆序恢复高->低位顺序
        cout<<"Case "<<index<<":"<<endl;
        cout<<a<<" + "<<b<<" = "<<s<<endl;
        if(index<n) cout<<endl;
        index++;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值