高精度加法:想要用int_64,显然是不能达到要求,会溢出。所以就需要用到字符串来储存家加数和被加数,通过字符和整形数字的转化对每一个对于字符进行加法运算。为方便计算,用int类型的数字来储存加法之后的结果。中途学要注意的是顺序问题,需要把加数和被加数倒序储存在另一个数组在进行按位加法,然后结果也是倒序输出。
#include "stdafx.h"
#include <algorithm>
#include<iostream>
using namespace std;
#include<cmath>
char a1[1005],b1[1005];
char a[1005],b[1005];
int c[1005];
int main()
{
int n;
cin>>n;
int w=1;
while(n--)
{
memset(c,0,sizeof(c));
cin>>a>>b;
int alen=strlen(a);
int blen=strlen(b);
char *p=a,*q=b;
int m1=max(alen,blen);
int m2=alen>blen?blen:alen;
p[alen]='\0';q[blen]='\0';
cout<<"Case "<<w++<<":"<<endl;
cout<<p<<" + "<<q<<" = ";
for(int i=m2;i>0;i--)
{
if(blen>alen)
{
a[i+m1-m2-1]=a[i-1];
a[i-1]='0';
}
else
{
b[i+m1-m2-1]=b[i-1];
b[i-1]='0';
}
}
if(alen>blen)
memset(b,'0',alen-blen);
else
memset(a,'0',blen-alen);
for(int i=0;i<m1;i++)
a1[i]=a[m1-1-i]-'0';
for(int i=0;i<m1;i++)
b1[i]=b[m1-1-i]-'0';
int i;
for(i=0;i<m1;i++)
{
int t=a1[i]+b1[i];
c[i]=t%10+c[i];
c[i+1]=c[i+1]+t/10+c[i]/10;
c[i]=c[i]%10;
}
if(c[i]!=0)
m1=m1+1;
for(int i=m1-1;i>=0;i--)
cout<<c[i];
cout<<endl;
if(n!=0)
cout<<endl;
}
return 0;
}