被秒殺的四捨五入
作法 : 手動字串分析
/**************************************************************/
#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;
}
有沒有方法用一行printf或cout就解出來呢?
若可以 應該是輸入%d.%d去做判斷
型態爆掉的話 過也只是僥倖
最後的可能 就是內建的強大 2009-12-08 18:10:01
這題是我出的…
但是我的學長想出了一個超快的解法
先用scanf把測資讀進來,存成字串
然後把小數點以下第四位後面的內容全部刪除
再利用sscanf存回小數
這樣就可以輕鬆引<math.h>用round()函式解決了