創作內容

0 GP

【程式語言新手】ZeroJudge-d516: 被秒殺的四捨五入

作者:十六夜 時生│2015-12-06 19:43:02│巴幣:0│人氣:230
題目連結: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 投資專家


我絕對不會為這題做註解的..................
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3036796
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★acd667y 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【爽】換了新的滑鼠...... 後一篇:【程式語言新手】Zero...

追蹤私訊切換新版閱覽

作品資料夾

optasia大家
《神劍少女》更新第4話,歡迎到小屋閱覽~看更多我要大聲說昨天20:33


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】