问题描述
该程序旨在转换用户输入的 USD($) 数量(从 0 美元到最多 10 美元),并以 25 美分、1 美分、镍币和便士的数量输出。
我目前正在使用:
- 带有 Geany 1.37.1 的 Linux ParrotOS
- G++ 编译命令:g++ -std=c++20 -Wall -c "%f"
#include <iostream>
const double QUARTER {0.25};
const double DIME {0.10};
const double NICKLE {0.05};
const double PENNY {0.01};
void dollarToCoin(double cash,unsigned short& quarters,unsigned short& dimes,unsigned short& nickles,unsigned short& pennies){
double cashRemainder = cash;
quarters = cashRemainder / QUARTER;
cashRemainder -= QUARTER * quarters;
dimes = cashRemainder / DIME;
cashRemainder -= DIME * dimes;
nickles = cashRemainder / NICKLE;
cashRemainder -= NICKLE * nickles;
pennies = cashRemainder / PENNY;
cashRemainder -= PENNY * pennies;
std::cout << "Remaining cash: " << cashRemainder << '\n';
}
int main(){
double cash{0};
unsigned short quarters{0};
unsigned short dimes{0};
unsigned short nickles{0};
unsigned short pennies{0};
std::cout << "Input your cash ($0 - $10 max): ";
std::cin >> cash;
dollarToCoin(cash,quarters,dimes,nickles,pennies);
std::cout << "Total quarters: " << quarters <<
'\n' << "Total dimes: " << dimes <<
'\n' << "Total nickles: " << nickles <<
'\n' << "Total pennies: " << pennies << '\n';
return 0;
}
有问题的行是 nickles = cashRemainder / NICKLE;
函数中的 dollarToCoin()
。这是伪代码:
- 启动程序,我以1.2为例
- 在
dollarToCoin()
中,我们将现金(1.2 美元)复制到cashRemainder
- 我们通过除以
quarters
= 4.8 来计算cashRemainder (1.2) / QUARTER (0.25)
,我们只保存整数并丢失 .8(现在我们有 4 个季度 = 1.00 美元) - 我们将这 4 个季度减去
cashRemainder (1.2)
给出的0.2
- 这是我的困惑部分:如果我调试这部分,我们计算总次数
dimes = cashRemainder(0.2) / DIME (0.1)
,它输出 1 而不是 2。
然而,如果我使用 --> dimes = cashRemaindder / DIME
替换 dimes = 0.2 / DIME
这实际上输出 2。
在程序结束时,它应该将输入(1.2)转换为:
Quarters: 4,Dimes: 2,Nickles: 0,Pennies: 0
我仍然没有优化代码,也没有使用任何库(我知道有更简单的方法)我只是对为什么会发生这种情况感到困惑。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)