杭电oj1002 高精度加法
测试什么的感觉都没问题,但是始终是WA
题目如下

我的代码如下
#include
#include
#include
#include
#include
using namespace std;
char s1[1050]={0},s2[1050]={0};
int a[1050]={0},b[1050]={0},c[1050]={0};
int main()
{
int n=1;
int lena,lenb,lenc,T;
while(scanf("%d",&T) != EOF){
while(T--){
scanf("%s%s",&s1,&s2);
lena = strlen(s1);
lenb = strlen(s2);
for(int i=0; i'0';
for(int i=0; i'0';
lenc = max(lena,lenb) + 1;
for(int i=1; i<=lenc; i++){
c[i] += a[i] + b[i];
c[i+1] = c[i]/10;
c[i] = c[i]%10;
}
for(int i=1; i<=lenc; i++){
if(c[lenc] == 0 && lenc > 0)
{
lenc--;
if(lenc==1)
break;
}
}
printf("Case %d:\n",n++);
printf("%s + %s = ",s1,s2);
for(int i=lenc; i>0; i--){
printf("%d",c[i]);
c[i] = 0;
}
printf("\n");
if(T != 0)
printf("\n");
}
n = 1;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int a[1000],b[1000],c[1000];
void init1(int a[])
{
char s[1000];//通过字符数组的形式输入数字
gets(s);
a[0]=strlen(s);//a[0]保存字符数组s的位数
for(int i=1;i<=a[0];i++)
{
a[i]=s[a[0]-i]-'0';//将字符数组转换为整形数组,并逆序储存
}
}
void init2(int a[])
{
string s;//通过字符串的形式输入数字
getline(cin,s);//或cin>>s;
a[0]=s.size();//a[0]保存字符串s的位数 或s.length();
for(int i=1;i<=a[0];i++)
{
a[i]=s[a[0]-i]-'0';//将字符串转换为整形数组,并逆序储存
}
}
void jiafa(int a[],int b[],int c[])
{
int x=0;//暂存进位,从0开始
int i=1;//位数的下标
while(i<=a[0]||i<=b[0])
{
c[i]=a[i]+b[i]+x;//对应位相加+上一次的位数
x=c[i]/10;//进位
c[i]=c[i]%10;//进位后剩下的数字
i++;//模拟下一位
}
c[i]=x;//最后的位数
c[0]=i;//将和c的位数统一保存在c[0]中
}
void aa(int a[])//删除数组a的前导0
{
while(a[0]>=1&&a[a[0]]==0)
{
a[0]--;
}
}
int main()
{
init1(a);
init1(b);//输入
aa(a);
aa(b);//删除前导0
jiafa(a,b,c);//a+b=c
aa(c);//删除c的前导0
for(int i=c[0];i>=1;i--)
{
cout<<c[i];//输出每一位
}
}