題目連結:http://zerojudge.tw/ShowProblem?problemid=d561
OK 相信大家看到這題 第一個想法都跟我一樣
printf("%.2lf",x);
就好啦
然而我必須跟你說 這寫法
有99.8%的機率會讓你獲得NA
網路上有很多教學如何四捨五入的方法,都可以試試看,有些還挺有用的(雖然我用了在這題還是NA 我覺得是我的原因 就不提了)
那要怎樣做呢?
在這裡要給大家一個想法
小數點是不精準的
這牽扯到二進位 因為很複雜 所以我就BJS了
主要就是小數點在經過運算或換算後
很大的機率會出現誤差
所以,不如我們就自己模擬吧?
對 概念很簡單,
還好題目很有良心,是給一個數字,要我們把它四捨五入即可
因此我們只要讀入這個 "字串" 再去判斷它的小數點後面第三位的大小即可。
不難,但有點麻煩
一樣 附上範例程式碼
#include <stdio.h>
#include <string.h>
int main()
{
char a[1000];
while(scanf("%s",a)!=EOF)
{
int i,s=strlen(a);
int f=0;
if(a[0]=='-')
{
if(a[5]>='5')
{
a[4]++;
}
if(a[4]>'9')
{
a[4]='0';
a[3]++;
}
if(a[4]=='\0')
{
a[4]=='0';
}
if(a[3]>'9')
{
a[3]='0';
a[1]++;
}
if(a[0]=='-'&&a[1]=='0'&&a[2]=='.'&&a[3]=='0'&&a[4]=='0')
{
printf("0.00\n");
}
else
{
for(i=0;i<5;i++)
{
printf("%c",a[i]);
}
}
}
else
{
if(a[4]>='5')
{
a[3]++;
}
if(a[3]>'9')
{
a[3]='0';
a[2]++;
}
elseif(a[3]=='\0')
{
a[3]='0';
}
if(a[2]>'9')
{
a[2]='0';
a[0]++;
}
for(i=0;i<4;i++)
{
printf("%c",a[i]);
}
}
printf("\n");
}
return0;
}
這提過了之後可以去看看d647 投資專家
我絕對不會為這題做註解的..................