HUST Online Judge WebBoard
Problem 4003 >> 错误50%,看不出来,大佬帮我看看!!
201803120102 @ 2019-11-12 18:34:48
[ Quote ] [ Edit ] [ Delete ] 1#
```
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
int a[105]={0},b[105]={0},i,j,n;
char a1[105];
int nt=0,max=-1;
cin>>n;
char exp[10]="0";
while(n--)
{
int flage=0;
while(gets(a1))
{
if(strcmp(a1,exp)==0)
break;
nt=strlen(a1);
if(max<nt)
{
max=nt;
}
for(i=0;i<nt;i++)
{
a[nt-i-1]=a1[i]-'0';
}//这里只要改,只要相加的部分就可以了
for(i=0;i<max;i++)
{
b[i]=b[i]+a[i]+flage;
flage=b[i]/10;
b[i]=b[i]%10;
}
b[i]=flage;
while(b[i]==0 && i>=1)
{
i--;
}
for(j=0;j<max;j++)
{
a[j]=0;
}//因为这里在还会保留之前没加的数因为你要加到最大值,

}
for(j=i;j>=0;j--)
{
cout<<b[j];
}
cout<<endl<<endl;
for(j=max;j>=0;j--)
{
a[j]=0;
b[j]=0;
}
}

return 0;
}
```
201803140220 @ 2019-11-13 19:42:05
[ Quote ] [ Edit ] [ Delete ] 2#
你的进位部分仍存在问题
比如说在计算9+9+9时答案仍为18
首先flage在循环后未归零,会对下次计算造成影响
其次你的 b[i]=flage 这里也存在问题,因为若下次max值不变,若再次进位你的b[i]就会被再次覆盖