69,373
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<string.h>
void turn(char A[]);
void sum(char A[],char B[],int C[]);
int main()
{
int i,t,C[1000]={0};
char A[1000],B[1000];
scanf("%d",&t);
for(i=1;i<=t;i++)
{
scanf("%s%s",A,B);
printf("Case %d:\n",i);
printf("%s + %s = ",A,B);
int s1=strlen(A);
int s2=strlen(B);
turn(A);
turn(B);
sum(A,B,C);
if(i!=t) printf("\n\n");
}
}
void turn(char A[]) //turn 函数将字符串字符顺序颠倒,并减去‘0’,以方便sum函数求和
{
int i,str=strlen(A);
char c;
for (i=0;i<str/2;i++)
c=A[i],A[i]=A[str-1-i],A[str-1-i]=c;
for(i=0;i<str;i++)
A[i]=A[i]-'0';
}
void sum(char A[],char B[],int C[]) //sum函数将AB两个数组的元素相加,并输出
{
int i,s,s1=strlen(A),s2=strlen(B);
for(i=0;i<s1&&i<s2;i++)
C[i]=A[i]+B[i];
if(s1>i) for(;i<s1;i++) C[i]=A[i];
else
for(;i<s2;i++) C[i]=B[i];
s=(s1>=s2?s1:s2);
for(i=0;i<s;i++)
if(C[i]>=10) C[i]-=10,C[i+1]+=1;
if (C[i]==1) printf("1");
for(i=s-1;i>=0;i--)
printf("%d",C[i]);
}
#include <cstdio>
#include <cstdlib>
#include <cstring>
const int MAX = 1002;
char sa[MAX],sb[MAX],res[MAX+1];
int Add(){
int pos,la,lb,ts,c;
la = strlen(sa)-1;
lb = strlen(sb)-1;
pos = MAX;
res[pos] = '\0';
c = 0;
while(la>=0 && lb>=0){
ts = (sa[la]-'0') + (sb[lb]-'0') +c;
res[--pos]=ts%10+'0';
--la,--lb;
c = ts/10;
}
while(la>=0){
ts = (sa[la]-'0')+c;
res[--pos]=ts%10+'0';
--la;
c = ts/10;
}
while(lb>=0){
ts = (sb[lb]-'0')+c;
res[--pos]=ts%10+'0';
--lb;
c = ts/10;
}
if(c!=0)res[--pos]='0'+c;
return pos;
}
int main(){
int pos,n,i;
scanf("%d",&n);
for(i=1;i<=n;++i){
scanf("%s %s",sa,sb);
pos = Add();
printf("Case %d:\n%s + %s = %s\n",i,sa,sb,res+pos);
if(i!=n)printf("\n");
}
return 0;
}
这是我AC的代码,思路是一样的,你可以简单参考下