头像

Unsubtly8561




离线:10天前


最近来访(0)


题目链接 Acwing 658

这个double类型的rest,本应该为1.01的,结果debug发现算出来是1.0099999(无限循环)。
之后我让rest自乘100,此时rest变成了100.99999
然后我想将rest赋值给一个int型的r,此时的r为100,而不是我想象中的101

问一下各位大佬:这种问题应该如何解决或者是如何避免呢?
非常感谢各位大佬愿意花费时间看我的问题。

问题代码:

#include<iostream>

using namespace std;

int main()
{

    double n;
    cin >> n;

    int num = (int)n;

    int a100 = num / 100;
    num %= 100;

    int a50 = num / 50;
    num %= 50;

    int a20 = num / 20;
    num %= 20;

    int a10 = num / 10;
    num %= 10;

    int a5 = num / 5;
    num %= 5;

    int a2 = num / 2;
    num %= 2;

    //为什么这里rest=1.009999999而不是1.01
    double rest = n - a100 * 100 - a50 * 50 - a20 * 20 - a10 * 10 - a5 * 5 - a2 * 2;

    cout << "NOTAS:" << endl;

     cout << a100 << " moeda(s) de R$ 100.00" << endl;
     cout << a50 << " moeda(s) de R$ 50.00" << endl;
     cout << a20 << " moeda(s) de R$ 20.00" << endl;
     cout << a10 << " moeda(s) de R$ 10.00" << endl;
     cout << a5 << " moeda(s) de R$ 5.00" << endl;
     cout << a2 << " moeda(s) de R$ 2.00" << endl;

    rest *= 100;    //rest = 100.999999999而不是101
    cout << rest << endl;   

    int r = rest;   //我这里想让r = 101的,因为前面rest = 1.0099999,导致这里r变成了100
    cout << r;


    cout << r / 100 << " moeda(s) de R$ 1.00" << endl;
    r %= 100;


    cout << r / 50 << " moeda(s) de R$ 0.50" << endl;
    r %= 50;

    cout << r / 25 << " moeda(s) de R$ 0.25" << endl;
    r %= 25;

    cout << r / 10 << " moeda(s) de R$ 0.10" << endl;
    r %= 10;


    cout << r / 5 << " moeda(s) de R$ 0.05" << endl;
    r %= 5;

    cout << r << " moeda(s) de R$ 0.01" << endl;

    return 0;
}