#include<iostream>
#include<string.h>
#define MAX_LEN 40
using namespace std;
static int num=0;
int an1[MAX_LEN+10];
int an2[MAX_LEN+10];
char Line1[MAX_LEN+10];
char Line2[MAX_LEN+10];
int Add(int nMaxLen,int*an1,int*an2)
{
int nHighestPos=0;
for(int i=0;i<nMaxLen;i++)
{
an1[i]+=an2[i];//逐位相加
if(an1[i]>=10)
{
an1[i]-=10;//进位
an1[i+1]++;
}
if(an1[i])
{
nHighestPos=i;//记录最高位的位置
}
}
return nHighestPos;
}
int main()
{
int n;
int i,j;
cin>>n;
while(n--&&n<=20)
{
num++;
cin>>Line1>>Line2;
cout<<"Case "<<num<<":"<<endl;
cout<<Line1<<" + "<<Line2<<" = ";
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
int nLen1=strlen(Line1);//下面把字符串逐个存到数组中
for(j=0,i=nLen1-1;i>=0;i--)
{
an1[j++]=Line1[i]-'0';
}
int nLen2=strlen(Line2);
for(j=0,i=nLen2-1;i>=0;i--)
{
an2[j++]=Line2[i]-'0';
}
int nHighestPos=Add(MAX_LEN,an1,an2);
for(i=nHighestPos;i>=0;i--)
{
cout<<an1[i];
}
cout<<endl;
if(n!=0)
{
cout<<endl;
}
}
return 0;
}
第一个莫名其面答案错误,求大佬
#include<iostream>
#include<string.h>
#define MAX 1000
using namespace std;
int main(){
int i,j,T,cont=0;
cin>>T;
int A[MAX]={0},B[MAX]={0};
char a[MAX],b[MAX];
while(T--){
cin>>a>>b;
int alen=strlen(a);
int blen=strlen(b);
for(i=0;i<MAX;i++){
A[i]=0;
B[i]=0;
}
for(i=0;i<alen;++i)
A[i]=a[alen-1-i]-48;
for(i=0;i<blen;++i)
B[i]=b[blen-1-i]-48;
int c=0; //进位
for(i=0;i<MAX;++i){
int s=A[i]+B[i]+c;
A[i]=s%10; //最后的数存到 A数组中 从左向右个十百千的顺序。。。。
c=s/10;
}
//输出
cout<<"Case "<<++cont<<":"<<endl;
for(i=0;i<alen;++i)
cout<<a[i];
cout<<" + ";
for(i=0;i<blen;i++)
cout<<b[i];
cout<<" = ";
for(i=MAX-1;i>=0;--i) if(A[i])break; //如果 遇到非零数,即第一个数,向下执行。
for(j=i;j>=0;j--){
cout<<A[j];
}
cout<<endl;
if(T) cout<<endl;
}
}