现给出两个非负整数A和B,求A+B
Input
第一行给出一个数字T (1<=T<=20),代表接下来有T组测试样例
接下来每一组测试样例由一行组成,一行内将给出两个整数A和B。
A和B的长度小于等于1000
Output
对于每一组测试样例,你应该输出两行。
第一行输出"Case #:"。#的意思是当前是第几个测试样例的数字。
第二行输出"A + B = SUM",A、B是原输入当中的数据,SUM是A+B运算结果,但是存在前导零的输出结果将不被认可
每两组测试样例之间留一个空行。
Sample Input
2 1 2 112233445566778899 998877665544332211
Sample Output
Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110
我的代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
char a[10005];
char b[10005];
char c[10005];
char f4[10005];
char g[10005];
char zx[10005];
char cv[10005];
char df[10005];
char df2[1005];
int main()
{
// freopen("data.txt","r",stdin);
// freopen("my_out.txt","w",stdout);
int n;
while(scanf("%d",&n)!=EOF)
{
int u=1;
// memset(c,0,sizeof(c));
// memset(a,0,sizeof(a));
// memset(b,0,sizeof(b));
// memset(f4,0,sizeof(f4));
// memset(g,0,sizeof(g));
// memset(zx,0,sizeof(zx));
// memset(cv,0,sizeof(cv));
// memset(df,0,sizeof(df));
for(int m=0;m<n;m++)
{
memset(c,0,sizeof(c));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(f4,0,sizeof(f4));
memset(g,0,sizeof(g));
memset(zx,0,sizeof(zx));
memset(cv,0,sizeof(cv));
memset(df,0,sizeof(df));
memset(df2,0,sizeof(df2));
scanf("%s",a);getchar();
scanf("%s",b);getchar();
int len1 = strlen(a);
int len2 = strlen(b);
int zx1=0;
for(int i=0;i<len1;i++)
{
zx[zx1++] = a[i];
}
int cv1=0;
for(int i=0;i<len2;i++)
{
cv[cv1++] = b[i];
}
// char f1=0;
// char g1=0;
// int ok=0;
// for(int i=0;i<len1;i++)
// {
// if(a[i] != '0'||ok==3)
// {
// ok=3;
// f4[f1++] = a[i];
// }
// else if(ok==0||ok==1)
// {
// ok=1;
// }
// }
// int ok2=0;
// for(int i=0;i<len2;i++)
// {
// if(b[i]!='0'||ok2==3)
// {
// ok2=3;
// g[g1++] = b[i];
// }
// else if(ok2==0||ok2==1)
// {
// ok2=1;
// }
// }
// printf("f4=%s g=%s\n",f4,g);
// int v=0,z=0;
// for(int i=0;i<len1;i++)
// {
// a[v++] = f4[i];
// }
// for(int i=0;i<len2;i++)
// {
// b[z++] = g[i];
// }
// printf("a=%s b=%s\n",a,b);
// len1 = strlen(a);
// len2 = strlen(b);
int f=0;
int p=0;
int h8=0;
if(len1 > len2)
{
int mk = len1-len2;
// printf("mk = %d\n",mk);
int df1=0;
for(int i=0;i<mk;i++)
{
df[df1++] = '0';
}
df[df1]='\0';
// for(int i=0;i<df1;i++)
// {
// printf("%c",df[i]);
// }
// printf("\n");
// string df6;
// df6 = df;
// cout << df6 << endl;
// printf("df=%s\n",df);
// printf("b=%s\n",b);
strcat(df,b);
// printf("df=%s\n",df);
// printf("a=%s\n",a);
strcpy(b,df);
// printf("b=%s\n",b);
for(int i=len1-1;i>=0;i--)
{
int k=0;
if(i == 0)
{
if(a[i]-'0' + b[i]-'0'+p >= 10)
{
k = (a[i]-'0'+b[i]-'0'+p)%10;
p = (a[i]-'0'+b[i]-'0'+p)/10;
c[f++] = k+'0';
c[f++] = p+'0';
}
else
{
k = a[i]-'0'+b[i]-'0'+p;
c[f++] = k+'0';
p=0;
}
}
else
{
if(a[i]-'0' + b[i]-'0'+ p >= 10)
{
k = (a[i]-'0'+b[i]-'0'+p)%10;
c[f++] = k+'0';
}
else
{
k = a[i]-'0'+b[i]-'0'+p;
c[f++] = k+'0';
}
p = (a[i]-'0'+b[i]-'0'+p)/10;
}
}
}
else if(len1 < len2)
{
// p=0;
int mk2 = len2-len1;
int df3=0;
for(int i=0;i<mk2;i++)
{
df2[df3++] = '0';
}
df2[df3]='\0';
strcat(df2,a);
strcpy(a,df2);
// printf("a=%s\n",a);
// printf("b=%s\n",b);
for(int i=len2-1;i>=0;i--)
{
int k=0;
if(i == 0)
{
if(a[i]-'0' + b[i]-'0'+p >= 10)
{
k = (a[i]-'0'+b[i]-'0'+p)%10;
p = (a[i]-'0'+b[i]-'0'+p)/10;
c[f++] = k+'0';
c[f++] = p+'0';
}
else
{
k = a[i]-'0'+b[i]-'0'+p;
c[f++] = k+'0'; p=0;
}
}
else if(i!=0)
{
if(a[i]-'0' + b[i]-'0'+ p >= 10)
{
k = (a[i]-'0'+b[i]-'0'+p)%10;
c[f++] = k+'0';
}
else
{
k = a[i]-'0'+b[i]-'0'+p;
c[f++] = k+'0';
}
p = (a[i]-'0'+b[i]-'0'+p)/10;
}
}
}
else
{
// p=0;
for(int i=len2-1;i>=0;i--)
{
int k=0;
if(i == 0)
{
if(a[i]-'0' + b[i]-'0'+p >= 10)
{
// printf("|||||\n");
// printf("p=%d\n",p);
// printf("a[i]=%c\n",a[i]);
// printf("b[i]=%c\n",b[i]);
k = (a[i]-'0'+b[i]-'0'+p)%10;
// printf("k=%d\n",k);
p = (a[i]-'0'+b[i]-'0'+p)/10;
// printf("p=%d\n",p);
c[f++] = k+'0';
c[f++] = p+'0';
}
else
{
k = a[i]-'0'+b[i]-'0'+p;
c[f++] = k+'0'; p=0;
}
}
else
{
if(a[i]-'0' + b[i]-'0'+ p >= 10)
{
k = (a[i]-'0'+b[i]-'0'+p)%10;
c[f++] = k+'0';
}
else
{
k = a[i]-'0'+b[i]-'0'+p;
c[f++] = k+'0';
}
p = (a[i]-'0'+b[i]-'0'+p)/10;
}
}
}
printf("Case %d:\n",u++);
strrev(c);
if(len1==0&&len2!=0)
{
printf("%s + %s = %s\n",zx,cv,b);
}
else if(len2==0&&len1!=0)
{
printf("%s + %s = %s\n",zx,cv,a);
}
else if(len1!=0&&len2!=0)
printf("%s + %s = %s\n",zx,cv,c);
else if(len1 == 0&&len2==0)
printf("%s + %s = 0\n",zx,cv);
if(m!=n-1)
printf("\n");
}
}
// fclose(stdin);
// fclose(stdout);
return 0;
}
简单写法:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
char a[1005],b[1005];
int f[1005];
int main()
{
// freopen("data.txt","r",stdin);
// freopen("ac_out.txt","w",stdout);
int n;
while(cin >> n)
{
int p = 0;
for(int k=0;k<n;k++)
{
cin >> a >> b;
memset(f,0,sizeof(f));
int ll1 = strlen(a);
int ll2 = strlen(b);
int l1 = ll1-1;
int l2 = ll2-1;
int t=0;
while(l1>=0&&l2>=0)
{
int x = f[t]+(a[l1]-'0' + b[l2]-'0');
f[t+1]+=x/10;
f[t] = x%10;
t++;l1--;l2--;
}
while(l1>=0)
{
int x = f[t]+(a[l1]-'0');
f[t+1]+=x/10;
f[t]=x%10;
t++;
l1--;
}
while(l2>=0)
{
int x=f[t]+(b[l2]-'0');
f[t+1]+=x/10;
f[t]=x%10;
t++;
l2--;
}
if(f[t]==0)
t--;
cout <<"Case "<<++p<<":"<<endl;
cout <<a<<" + "<<b<<" = ";
for(int i=t;i>=0;i--)
cout<<f[i];
cout << endl;
if(k!=n-1)
cout << endl;
}
// fclose(stdin);
// fclose(stdout);
}
return 0;
}