【问题标题】:Program that converts money into bills将钱转换成票据的程序
【发布时间】:2022-10-01 12:56:23
【问题描述】:

我有一个任务,用户输入一些钱,它应该给他们他们需要的钞票和硬币的数量,但我被困在存储零钱和获得所需的零钱数量上。

我遇到的问题是我知道我不能将硬币存储为整数,但如果我尝试将其存储为双精度数,则会出现错误,即 %mod 不能与双精度数一起使用。 有没有办法在计算完初始账单后提取剩余部分?带双

目前的情况是,如果我输入 456.56,我将得到 400 美元的钞票、2 个 20 美元、1 个 10 美元等,但 0.56 什么也没有

/*This program will convert the amount of money entered by the user into the amount of bills and change*/

#include<iostream>
#include<iomanip>

using namespace std;

int main()
{
    const int HUNDRED = 100;
    const int TWENTY = 20;
    const int TEN = 10;
    const int FIVE = 5;
    const int DOLLAR = 1;
    const int QUARTER = 25;
    const int DIME = 10;
    const int NICKEL = 05;
    const int PENNY = 01;
    int changeAmount; 

    cout << \"Enter amount of money to convert: $\"; 
    cin >> changeAmount;

    cout << \"\\n\";
    
    cout << \"Numbe of 100 dollar bills: \" << (int)changeAmount / HUNDRED << endl; 
    changeAmount = changeAmount % HUNDRED; 

    cout << \"Numbe of 20 dollar bills: \" << (int)changeAmount / TWENTY << endl;
    changeAmount = changeAmount % TWENTY;

    cout << \"Numbe of 10 dollar bills: \" << (int)changeAmount / TEN << endl;
    changeAmount = changeAmount % TEN;

    cout << \"Numbe of 5 dollar bills: \" << (int)changeAmount / FIVE << endl;
    changeAmount = changeAmount % FIVE;

    cout << \"Numbe of 1 dollar bills: \" << (int)changeAmount / DOLLAR << endl;
    changeAmount = changeAmount % DOLLAR;

    cout << \"Numbe of Quarters: \" << (int)changeAmount / QUARTER << endl;
    changeAmount = changeAmount % QUARTER;

    cout << \"Numbe of Dimes: \" << (int)changeAmount / DIME << endl;
    changeAmount = changeAmount % DIME;

    cout << \"Numbe of Nickles: \" << (int)changeAmount / NICKEL << endl;
    changeAmount = changeAmount % NICKEL;

    cout << \"Numbe of Pennies: \" << (int)changeAmount / PENNY << endl;
    changeAmount = changeAmount % PENNY;

    

        return 0;
}
  • int 表示整数.您的cin &gt;&gt; changeAmount; 不会读取.56,它只会读取整数.
  • \" 我知道我不能将硬币存储为整数\" -- 谁告诉你的,这绝对不正确? 45656 是一个完美的整数,代表 456.56,它使显示的代码几乎可以正常工作,只是表面上的变化。您的工作包括简单地找出接受 \"456.56\" 输入的简单方法,并将其转换为 \"45656\",并保持其余显示的代码不变,这不是很明显吗?
  • 但如果我尝试将它存储为双——你应该在整个项目中用便士工作。 456.56 只是您要转换的内容的文本表示 - 然后您的目标是将456.56 转换为45656int 值并使用它。
  • 嗯,我从来没有这样看。但这完全有道理。我怀疑有更好的方法来做到这一点,因为如果这是一个数学问题,你可能会认为这是一场灾难。
  • const int PENNY = 01; 请注意,以 0 开头的数字是八进制的。使用 01 不会伤害您,但如果您不想要八进制,最好不要使用它。

标签: c++


【解决方案1】:

您可以做的一件事是将所有内容乘以 100 并以美分处理所有内容。如果输入 456.56,程序会在内部将其转换为 45,656。然后,它将检查 100 美元的倍数,也称为 10,000 美分。对于其余的美元钞票和硬币,这种情况仍在继续。请注意,您还必须将changeAmount 初始化为floatdouble,因为您从cin 接收十进制值。这是您可以实现它的一种方法:

/*This program will convert the amount of money entered by the user into the amount of bills and change*/

#include<iostream>
#include<iomanip>

using namespace std;

int main()
{
    const int HUNDRED = 10000;
    const int TWENTY = 2000;
    const int TEN = 1000;
    const int FIVE = 500;
    const int DOLLAR = 100;
    const int QUARTER = 25;
    const int DIME = 10;
    const int NICKEL = 5;
    const int PENNY = 1;
    double changeAmountDouble;

    cout << "Enter amount of money to convert: $"; 
    cin >> changeAmountDouble;

    int changeAmount = round(changeAmountDouble * 100);

    cout << "\n";
    
    cout << "Number of 100 dollar bills: " << (int)changeAmount / HUNDRED << endl; 
    changeAmount = changeAmount % HUNDRED; 

    cout << "Number of 20 dollar bills: " << (int)changeAmount / TWENTY << endl;
    changeAmount = changeAmount % TWENTY;

    cout << "Number of 10 dollar bills: " << (int)changeAmount / TEN << endl;
    changeAmount = changeAmount % TEN;

    cout << "Number of 5 dollar bills: " << (int)changeAmount / FIVE << endl;
    changeAmount = changeAmount % FIVE;

    cout << "Number of 1 dollar bills: " << (int)changeAmount / DOLLAR << endl;
    changeAmount = changeAmount % DOLLAR;

    cout << "Number of Quarters: " << (int)changeAmount / QUARTER << endl;
    changeAmount = changeAmount % QUARTER;

    cout << "Number of Dimes: " << (int)changeAmount / DIME << endl;
    changeAmount = changeAmount % DIME;

    cout << "Number of Nickles: " << (int)changeAmount / NICKEL << endl;
    changeAmount = changeAmount % NICKEL;

    cout << "Number of Pennies: " << (int)changeAmount / PENNY << endl;
    changeAmount = changeAmount % PENNY;

    

    return 0;
}

【讨论】:

  • 当您尝试编译所示代码的版本时,它真的编译了吗?你试过编译你写的东西吗?
  • 您是否还知道 floating point math is broken 并将一个似乎只有小数点后两位数字的双精度值乘以 100 可能不一定,在截断为 int 值之后,会产生预期的结果?例如,将 456.56 乘以 100 可能会得到类似 45655.9999999 的结果,将结果截断为 45655?可能不是这个特定的小数点值,但找到魔法发生的正确小数点应该不会太难。
【解决方案2】:

% 运算符用于整数。您正在寻找 fmod() 函数。

#include <cmath>

int main()
{
    double x = 6.3;
    double y = 2.0;
    double z = std::fmod(x,y);

}

【讨论】:

    猜你喜欢
    • 2018-01-29
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 2018-10-31
    • 2013-11-29
    相关资源
    最近更新 更多