这道题后续做了修改,不保证代码能通过现在的测试用例。
写得很复杂,随便看看就好。
#include <stdio.h>
#include <string.h>
#define ALL 10010
char s1[ALL],s2[ALL];
int a[ALL],b[ALL],c[ALL],i,j,flag,M;
void Add(char *s,int *A,int len,int alen)
{
for(i=1;i<=len-alen;i++)
A[i]=0;
if(alen!=0)
{
for(i=1,flag=0;i<=A[0]+1;i++)
{
if(s[A[0]-i+1]=='.')
{
flag=1;
continue;
}
else if(!flag)
A[i+len-alen]=s[A[0]-i+1]-'0';
else
A[i-1+len-alen]=s[A[0]-i+1]-'0';
}
}
else
{
for(i=1;i<=A[0];i++)
A[i+len-alen]=s[A[0]-i]-'0';
}
A[0]=A[0]+len-alen;
}
int main()
{
int alen,blen,len,W;
gets(s1);
gets(s2);
a[0]=strlen(s1);
b[0]=strlen(s2);
char *p=strchr(s1,'.');
char *q=strchr(s2,'.');
if(p!=NULL)
{
a[0]--;
alen=a[0]-(p-s1);
}
else alen=0;
if(q!=NULL)
{
b[0]--;
blen=b[0]-(q-s2);
}
else
blen=0;
len=alen>blen?alen:blen;
Add(s1,a,len,alen);
Add(s2,b,len,blen);
c[0]=a[0]>b[0]?a[0]:b[0];
for(i=1;i<=c[0];i++)
{
c[i]=a[i]+b[i]+c[i];
if(c[i]>=10)
{
c[i]=c[i]-10;
c[i+1]++;
}
}
if(c[c[0]+1]!=0) c[0]++;
while(c[c[0]]==0&&c[0]>len) c[0]--;
W=(b[0]<a[0])?a[0]:b[0];
W=W>c[0]?W:c[0];
W=W+4;
for(i=1;i<=4;i++)
{
if(i==1)
{
for(j=1;j<=W;j++)
{
if(j<=W-a[0]-1)
printf(" ");
else if(j<W-len)
printf("%d",a[W-j]);
else if(j==W-len)
{
if(alen!=0)
printf(".");
else if(blen!=0)
printf(" ");
else
break;
}
else if(j<=W-len+alen)
printf("%d",a[W-j+1]);
else printf(" ");
}
}
else if(i==2)
{
for(j=1;j<=W;j++)
{
if(j==1)
printf("+");
else if(j<=W-b[0]-1)
printf(" ");
else if(j<W-len)
printf("%d",b[W-j]);
else if(j==W-len)
{
if(blen!=0)
printf(".");
else if(alen!=0)
printf(" ");
else
break;
}
else if(j<=W-len+blen)
printf("%d",b[W-j+1]);
else
printf(" ");
}
}
else if(i==3)
{
for(j=1;j<=W;j++)
{
if(j==W&&alen==0&&blen==0)
break;
printf("-");
}
}
else if(c[0]>len)
{
for(j=1,flag=0;j<=W;j++)
{
if(j<=W-c[0]-1)
printf(" ");
else if(j<W-len)
{
if(c[W-j]==0)
{
if(flag==0)
printf(" ");
else
printf("%d",c[W-j]);
}
else
{
printf("%d",c[W-j]);
flag=1;
}
}
else if(j==W-len)
{
if(alen!=0||blen!=0)
printf(".");
else
break;
}
else
printf("%d",c[W-j+1]);
}
}
else
{
for(j=1;j<=W;j++)
{
if(j<=W-len-2)
printf(" ");
else if(j==W-len-1)
printf("0");
else if(j==W-len)
{
if(len>0)
printf(".");
else
break;
}
else
printf("%d",c[W-j+1]);
}
}
printf("\n");
}
}