2009-12-06 11:11:46來源不明

a+b??

作法 : 大數浮點數加法

之前寫的太雜亂  且效率不好  在此做修正

/***********************************************************/

#include<stdlib.h>
#include<stdio.h>
main()
{
  char A[500],B[500];
  while(scanf("%s %s",&A,&B)==2)
      {
          int PA=0,PB=0,a,b,c,MAX=0;
          for(a=0;A[a]!='\0';a++)
             if(A[a]=='.') {PA=a;break;}
          for(a=0;B[a]!='\0';a++)
             if(B[a]=='.') {PB=a;break;}
          int Double[301]={0}; /*前50格 整數(0~50) 後給小數點*/
          for(a=0,b=50-PA;A[a]!='\0';a++,b++)
                Double[b]=A[a]-'0';
          MAX=a-PA;
          for(a=0,b=50-PB;B[a]!='\0';a++,b++)
                Double[b]+=(B[a]-'0');  
          Double[50]=0;
          if(a-PB>MAX) MAX=a-PA;
          for(a=MAX+50;a>=1;a--)
             {
              if(a==250&&Double[a+1]>=5) Double[a]++;
              if(a==51)              
                {
                 Double[a-2]=Double[a-2]+Double[a]/10;
                 Double[a]%=10;
                }
              else
                {
                 Double[a-1]=Double[a-1]+Double[a]/10;
                 Double[a]%=10;
                }
             }
          for(a=0;a<=250;a++)
             if(Double[a]!=0)
               {
                 for(b=a;b<50;b++)
                   putchar(Double[b]+'0');
                 if(a>=50) putchar('0');
                 putchar('.');
                 for(b=51;b<=250;b++)
                   putchar(Double[b]+'0');
                 break;
               }
            puts("");
      }
  return 0;
}

上一篇:重複排列 (修正版)

下一篇:獨角獸查理