24h購物| | PChome| 登入
2009-12-07 18:54:21| 人氣4,160| 回應2 | 上一篇 | 下一篇

被秒殺的四捨五入

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

作法 : 手動字串分析

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

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
main()
{
  char S[200];
  while(scanf("%s",&S)==1)
      {
         int N=strlen(S),Flag=0,NUM=0,P=0,a;
         for(a=0;a<N;a++)
            if(S[a]=='.')
              {
               P=(S[a+1]-48)*10;
               if(a+3<N)
                 if(S[a+3]>='5')
                    S[a+2]++;
               if(a+2<N)
                  P+=(S[a+2]-48);
                  break;
               }
            else
              {
               if(S[a]=='-') Flag=1;
               else
                NUM=NUM*10+S[a]-48;
              }
         if(P>=100) P%=100,NUM++;
         if(Flag==1&&(NUM!=0||P!=0)) putchar('-');
         printf("%d.%02d\n",NUM,P);
      }
  return 0;
}

台長: 來源不明
人氣(4,160) | 回應(2)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ZeroJudge 基礎+原創題庫 |
此分類下一篇:整數編號輸出
此分類上一篇:班號

ZJ人
有沒有方法用一行printf或cout就解出來呢?
2009-12-08 12:56:34
版主回應
基本上是不行的
若可以 應該是輸入%d.%d去做判斷
型態爆掉的話 過也只是僥倖
最後的可能 就是內建的強大
2009-12-08 18:10:01
jack1
這題是我出的…
但是我的學長想出了一個超快的解法
先用scanf把測資讀進來,存成字串
然後把小數點以下第四位後面的內容全部刪除
再利用sscanf存回小數
這樣就可以輕鬆引<math.h>用round()函式解決了
2010-01-13 14:33:16
是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文