2009-12-07 18:54:21來源不明

被秒殺的四捨五入

作法 : 手動字串分析

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

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

上一篇:班號

下一篇:整數編號輸出

jack1 2010-01-13 14:33:16

這題是我出的…
但是我的學長想出了一個超快的解法
先用scanf把測資讀進來,存成字串
然後把小數點以下第四位後面的內容全部刪除
再利用sscanf存回小數
這樣就可以輕鬆引<math.h>用round()函式解決了

ZJ人 2009-12-08 12:56:34

有沒有方法用一行printf或cout就解出來呢?

版主回應
基本上是不行的
若可以 應該是輸入%d.%d去做判斷
型態爆掉的話 過也只是僥倖
最後的可能 就是內建的強大
2009-12-08 18:10:01