c - 将输入金额分解为钞票的C程序
问题描述
我正在做一个练习来分解钞票中的金额,但我得到了一个浮点异常。
#include <stdio.h>
int main()
{
int amount, n100, n50, n20, n10, n5, n2, n1;
printf("Input the amount: \n");
scanf("%i", &amount);
n100 = amount / 100;
n50 = (amount % 100) / 50;
n20 = (int)(n50 % (amount % 100)) / 20;
n10 = (int)(n20 % (n50 % (amount % 100))) / 10;
n5 = (int)(n10 % (n20 % (n50 % (amount % 100)))) / 5;
n2 = (int)(n5 % (n10 % (n20 % (n50 % (amount % 100))))) / 2;
n1 = (int)(n2 % (n5 % (n10 % (n20 % (n50 % (amount % 100)))))) / 1;
printf("%i Note(s) of 100.00\n", n100);
printf("%i Note(s) of 50.00\n", n50);
printf("%i Note(s) of 20.00\n", n20);
printf("%i Note(s) of 10.00\n", n10);
printf("%i Note(s) of 5.00\n", n5);
printf("%i Note(s) of 2.00\n", n2);
printf("%i Note(s) of 1.00\n", n1);
return 0;
}
解决方案
正如在大多数金额的评论中已经提到的那样,您会在某些时候遇到x % 0
未定义的行为并且会引发错误。
改进代码的基本方法可能是这样的:
#include <stdio.h>
int main()
{
int amount, n100, n50, n20, n10, n5, n2, n1;
int rest;
printf("Input the amount: \n");
scanf("%i", &amount);
n100 = amount / 100;
rest = amount % 100;
n50 = rest / 50;
rest = rest % 50;
n20 = rest / 20;
rest = rest % 20;
n10 = rest / 10;
rest = rest % 10;
n5 = rest / 5;
rest = rest % 5;
n2 = rest / 2;
rest = rest % 2;
n1 = rest;
printf("%i Note(s) of 100.00\n", n100);
printf("%i Note(s) of 50.00\n", n50);
printf("%i Note(s) of 20.00\n", n20);
printf("%i Note(s) of 10.00\n", n10);
printf("%i Note(s) of 5.00\n", n5);
printf("%i Note(s) of 2.00\n", n2);
printf("%i Note(s) of 1.00\n", n1);
return 0;
}
通过这种方式,您可以减少铸造次数,更清楚正在发生的事情,并且没有机会遇到零分裂。
推荐阅读
- unity3d - 使用运动学刚体进行 Unity 2D 碰撞检测
- google-bigquery - 合并大查询中的嵌套列
- sql - SQL插入问题
- css - 按钮旁边的输入 - 更改按钮的字体大小会更改布局
- php - 在多对一关系的表单字段中添加“新”链接
- prettier - 更漂亮:在函数和括号之间添加空格
- java - 如何按长度对字符串进行排序
- postgresql - Postgresql - 如何组合这两个查询
- python - 使用 Python 的 Oracle DB 连接错误 - cx_Oracle:找不到 32 位 Oracle 客户端库
- git - 如何正确使用 GitHub 和 Git 创建分支