#29572: cpp 字串解法


tommy123234345456567@gmail.com (星雨)

學校 : 國立內壢高級中學
編號 : 111941
來源 : [116.241.253.53]
最後登入時間 :
2023-01-26 21:21:44
d561. 被秒殺的四捨五入 -- jack1 | From: [110.26.156.95] | 發表日期 : 2022-03-12 18:18

為了不受浮點數的誤差干擾,使用字串來解,四捨五入到小數點以下第2位所以只要專注於到小數點3位即可

注意長度可能只有3位(ex:0.2)導致溢位和負數的字串長度變更和-0.00要輸出0.00的特例

以下為程式碼

#include <iostream>

#include <string>

using namespace std;

 

int main()

{

    string str;

    while(cin >> str)

    {

        int ne=0;

        if(str[0]=='-') ne=1;

        if(str.length()==3+ne) str=str+'0';

        else if(str.length()>=5+ne)

        {

            if(str[4+ne]>='5') str[3+ne]++;

            if(str[3+ne]>'9')

            {

                str[3+ne]='0';

                str[2+ne]++;

            }

            if(str[2+ne]>'9')

            {

                str[2+ne]='0';

                str[0+ne]++;

            }

        }

        if(ne==1 && str[1]=='0' && str[3]=='0' && str[4]=='0')

            cout << str.substr(1,4) << '\n'; //特例-0.00輸出0.00

        else cout << str.substr(0,4+ne) << '\n';

    }

    return 0;

}

 

 
ZeroJudge Forum