我正在做一项工作,用钞票来分解一笔钱,但我得到了一个浮点数的例外。
#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;
}发布于 2021-04-22 15:11:26
在干原理下,用数组来表示面额和计数如何?
每当我看到(例如) v1, v2, v3, ..., vN时,它就会“呼喊”一个数组。
对于这个用例,这可能不是很明显。但是,如果N是一个很大的数字(例如1000),就会更容易看出。也就是说,我们有一个包含1000个元素的数组变量,而不是1000个单独的变量。
#include <stdio.h>
#define COUNTOF(_arr) (sizeof(_arr) / sizeof(_arr[0]))
int denoms[] = { 100, 50, 20, 10, 5, 2, 1 };
#define COUNT COUNTOF(denoms)
int counts[COUNT];
int
main(void)
{
int amount;
printf("Input the amount: ");
fflush(stdout);
scanf("%d",&amount);
int value = amount;
for (int idx = 0; idx < COUNT; ++idx) {
int denom = denoms[idx];
counts[idx] = value / denom;
value %= denom;
}
for (int idx = 0; idx < COUNT; ++idx) {
int count = counts[idx];
if (count)
printf("%d Notes of %d.00\n",count,denoms[idx]);
}
return 0;
}发布于 2021-04-22 14:58:33
正如在大多数数量的注释中已经提到的,您将在某个时候遇到一个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;
}这样你就少得多的铸造,这是更清楚的发生了什么,没有机会遇到零分割。
https://stackoverflow.com/questions/67215538
复制相似问题