首页 > 其他 > 详细

Hdu1002 A+B ProblemII(大数相加模拟)

时间:2014-02-27 17:33:57      阅读:401      评论:0      收藏:0      [点我收藏+]

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002

bubuko.com,布布扣
#include<iostream>
#include<vector>
#include<string>
#include<cstring>
using namespace std;

int t;
char a[1001],b[1001];
int sum[2000];
int la,lb,tmp;

int idx(char x){
    return x-0;
}
//进位以后还要复原。所以进位也不能进在a跟b上,就只能进在sum上面 
 
int main (){

    cin>>t;
    int c=1;
    while(t--){
        
        char *ls,*ss;
        int l,s;
        cin>>a+1>>b+1;//腾出一个空位给进位 
        b[0]=a[0]=0;
        la=strlen(a+1);
        lb=strlen(b+1);//注意strlen(a)返回值是0 
        
        if(la>lb)
        {
            ls=a;l=la;
            ss=b;s=lb;
        }
        else
        {
            ls=b;l=lb;
            ss=a;s=la;
        }
        
        memset(sum,0,sizeof(sum));
        for(int i=l,j=s;j>0;i--,j--)
        {
            tmp=sum[i]+idx(ls[i])+idx(ss[j]);
            if(tmp>=10)
            {
                tmp-=10;
                sum[i-1]++;
            }
            sum[i]=tmp;
        }
        for(int i=l-s;i>=0;i--)
        {
            sum[i]+=idx(ls[i]);
            if(sum[i]>=10)//显然i=0的时候肯定否 
            {
                sum[i]-=10;
                sum[i-1]++;
            }
        }
        
        cout<<"Case "<<c++<<":\n"
        <<a+1<<" + "<<b+1<<" = ";
        
        if(sum[0]!=0)
            cout<<sum[0];
        for(int i=1;i<=l;i++)
            cout<<sum[i];
        if(t==0)//如果是最后一次输出了
            cout<<endl;
        else
            cout<<endl<<endl; 
    }    
    return 0;
}
bubuko.com,布布扣

Hdu1002 A+B ProblemII(大数相加模拟),布布扣,bubuko.com

Hdu1002 A+B ProblemII(大数相加模拟)

原文:http://www.cnblogs.com/neverchanje/p/3569963.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!