已然给你改好叻~
代码如下:
#include
__int64 a=0,b=0,i=0,n;
int main()
{
while(scanf("%lld",&n)!=EOF)
{
while(n--)
{
scanf("%lld%lld",&a,&b);
i++;
printf("case %lld:\n",i);
if(n!=0) printf("%lld+%lld=%lld\n\n",a,b,a+b);
else printf("%lld+%lld=%lld\n",a,b,a+b);
}
}
return 1;
}
No,这是高精度加法~~
//-------------------------------------------------------------
#include
#include
#define clear(a) memset(a,0,sizeof(a))
char A[1010],B[1010],Ans[1010];
int La,Lb,Lans,L;
int N;
void Swap(char &a,char &b)
{
char Temp=a;
a=b;
b=Temp;
}
int Maxx(int x,int y)
{
return x>y?x:y;
}
void Turn(int L,char List[])
{
for (int i=1;i<=L;i++)
{
List[i]=List[i]-48;
}
for (int i=1;i<=L/2;i++)
{
Swap(List[i],List[L-i+1]);
}
}
void Add(char A[],char B[],int L,char C[],int &Lc)
{
int K;
char Temp;
clear(C);
for (int i=1;i<=L;i++)//求和
{
C[i]=A[i]+B[i];
}
for (int i=1;i<=L;i++)//进位
{
K=i-1;Temp=C[i];
C[i]=0;
while (Temp>0)
{
K++;
C[K]+=Temp%10;
Temp=Temp/10;
}
}
Lc=Maxx(K,L);
}
void Back(char List[],int L)
{
for (int i=1;i<=L;i++)
{
List[i]+='0';
}
for (int i=1;i<=L/2;i++)
{
Swap(List[i],List[L-i+1]);
}
}
int main(void)
{
freopen("Data.in","r",stdin);
freopen("Data.out","w",stdout);
scanf("%d",&N);
for(int i=1;i<=N;i++)
{
clear(A);clear(B);
scanf("%s%s\n",&A[1],&B[1]);
La=strlen(&A[1]);
Lb=strlen(&B[1]);
Turn(La,A);//翻转,像这样翻转过后。就不许用考虑去掉高位的0了。
Turn(Lb,B);//翻转
L=Maxx(La,Lb);
Add(A,B,L,Ans,Lans);//求和
Back(Ans,Lans);
Back(A,La);
Back(B,Lb);
printf("Case %d:\n",i);
printf("%s + %s = %s\n",&A[1],&B[1],&Ans[1]);
printf("\n");
clear(A);clear(B);clear(Ans);
}
return 0;
}
以后做题要先确认数据范围,切记切记~~~~~
这题是高精度计算,用C里面自带的数据类型是不行的。示例里面只是小数目,真正测试里有比那大得多的,它那句话是说每个数不超过1000位。
用长度1000的数组来存储每个数,然后自己编写加法运算。就像手算竖式一样的。
比如两个数存在了a[1000],b[1000]里面,那么他们加起来就是
for(int i=0;i<1000;++i) a[i]+=b[i]; (相加)
for(int i=0;i<1000;++i)
if(a[i]>9) {++a[i+1]; a[i]-=10;} (进位)
然后输出a[],注意去掉高位的0。
当然这个代码是不行的,你还要考虑a+b超过1000位的情况,所以数组应该开成1001。
已然给你改好叻~
代码如下:
#include
__int64 a=0,b=0,i=0,n;
int main()
{ }
}
return 1;
}
No,这是高精度加法~~
//-------------------------------------------------------------
#include
#include
#define clear(a) memset(a,0,sizeof(a))
char A[1010],B[1010],Ans[1010];
int La,Lb,Lans,L;
int N;
void Swap(char &a,char &b)
{
char Temp=a;
a=b;
b=Temp;
}
int Maxx(int x,int y)
{
return x>y?x:y;
}
你在网上找大整数的解决办法吧,基本类型里存不了这么大的。