24h購物| | PChome| 登入
2009-12-06 11:11:46| 人氣530| 回應0 | 上一篇 | 下一篇

a+b??

推薦 0 收藏 0 轉貼0 訂閱站台

作法 : 大數浮點數加法

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

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

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

台長: 來源不明
人氣(530) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ZeroJudge 基礎+原創題庫 |
此分類下一篇:獨角獸查理
此分類上一篇:重複排列 (修正版)

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文