我必须创建一个项目,该项目包括计算形成一个数字所需的硬币数量。您有夸脱,角钱,镍币和便士,并且您需要形成数量最少的硬币。您需要填写的号码会提示用户。
这在Python中非常简单(我实现了一个函数来快速执行操作):
def calculate_change(change):
count = 0
change*=100
change = int(change)
if change // 25 != 0:
count = change // 25
change = change % 25
if change // 10 != 0:
count += change // 10
change = change % 10
if change // 5 != 0:
count += change // 5
change = change % 5
if change // 1 != 0:
count += change // 1
print count
calculate_change(73)
现在,要在C中实现此功能,我遇到了一些麻烦。我不太了解如何更改用户提示的浮动。我需要先将其转换为两倍,再乘以100,然后转换为int,但是我遇到了麻烦。这是我为此写的:
int main(void)
{
float n;
do
{
printf("Change you need: ");
n = GetFloat();
}
while (n < 0);
n = floorf(n * 100 + 0.5) / 100;
int change = (int) n;
change = change * 100;
int count = 0;
if (change / 25 != 0)
{
count = change / 25;
change = change % 25;
}
if (change / 10 != 0)
{
count = count + change / 10;
change = change % 10;
}
if (change / 5 != 0)
{
count = count + change / 5;
change = change % 5;
}
if (change / 1 != 0)
{
count = count + change / 1;
change = change % 1;
}
printf("%d\n", count);
}
从C中的float到int的转换有什么问题吗?当用户提示一个介于0和1之间的数字时,程序返回错误的结果(总是0)。
谢谢 !
问题
当n = 0.5
,
floorf(n * 100 + 0.5) / 100 = floorf(50.5)/100 = 50/100 = 0.5
因此,声明
n = floorf(n * 100 + 0.5) / 100;
不会更改的值n
。现在,当您执行时:
int change = (int) n;
change
设置为0
。这就解释了为什么要获得介于之间的0
大多数值。n
0.0-1.0
解
我将替换以下行:
n = floorf(n * 100 + 0.5) / 100;
int change = (int) n;
change = change * 100;
与
n = floorf(n * 100 + 0.5); // Just to make sure rounding occurs properly.
// Thanks to Mark Ransom.
int change = (int) n;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句