7.A+B(II)

这道题后续做了修改,不保证代码能通过现在的测试用例。

写得很复杂,随便看看就好。

#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");   
  }      
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值