hdu 1002 A + B Problem II(高精度加法)

数值较大,所以选用字符串解决该问题。考虑到进位的问题,所以从字符串数组的末位开始往前依次相加,因为两个0~9的数相加最多往前面进一位,所以定义一个flag,用来记录是否要进位。

#include<iostream>
#include<string.h>
#include<string>
using namespace std;
int c[1000001];//用来存储结果的字符串
int main()
{
int n;
cin>>n;
int num=1;
while(n--)
{
string a,b;
cin>>a>>b;
int p=0;
int flag=0;//记录是否要进位
int i,j;
memset(c,0,sizeof(c));
cout<<"Case "<<num++<<":"<<endl;
cout<<a<<" + "<<b<<" = ";
if(a.size()<b.size()||(a.size()==b.size()&&a<b))
{
swap(a,b);//保证a大于b,便于后面的计算
}
for(i=a.size()-1,j=b.size()-1;j>=0;i--,j--)//将a,b相加,从末位开始
{
c[p++]=(flag+a[i]+b[j]-'0'-'0')%10;//a,b均为字符串,要减去字符0
flag=(a[i]+b[j]+flag-'0'-'0')/10;
}
while(i>=0)//当a的长度大于b的长度的时候
{
c[p++]=(flag+a[i]-'0')%10;
flag=(a[i]+flag-'0')/10;
i--;
}
if(flag)//当flag不为零说明要往前进一位
{
c[p++]=flag;
}
for(int i=p-1;i>=0;i--)
{
cout<<c[i];
}
if(n!=0)
cout<<endl;
cout<<endl;
}
return 0;
}

posted on 2020-02-08 21:13  灬旧人灬  阅读(103)  评论(0编辑  收藏  举报