所以我在CS50的过程中开始学习C了2天。在第2周的问题集中,对Greedy算法进行编码面临一个挑战,该算法基本上以最少的硬币量将返还给客户。 这是我在CS50沙箱中编写的解决方案。
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int main(void)
{
//Assign value
int q = 0; int d = 0; int n = 0; int p =0;
int left;
int count = 0;
float change;
// Promting user for change.
do
{
change = get_float("Change:");
}
while(change < 0);
// Convert cent to dollar.
int cent = round(change * 100);
printf("Dollar %i\n", cent);
//Counting coin
while(cent >=25)
{
q++;
left = cent - 25;
}
while(left >=10)
{
d++;
left = left -10;
}
while(left >=5)
{
n++;
left = left -5;
}
while(left >=1)
{
p++;
left=left-1;
}
count = q + d + n + p;
printf("Total coin: %i\n", count);
}
我通过CS50沙箱中的CS50终端运行代码,并得到以下错误:
cash.c:27:10: runtime error: signed integer overflow: 2147483647 + 1 cannot be represented in type 'int'
我知道我的循环超出了将数据存储到int的限制。但是我找不到解决方法。
答案 0 :(得分:1)
你有这个:
while(cent >=25)
q++;
left = cent - 25;
}
如果cent
最初大于25,则此循环会结束吗? cent
永远不会改变,所以不会。其他循环很好,因此您所要做的就是也使用与其他循环相同的模式。
答案 1 :(得分:0)
您不需要更改q
的类型,即int
-对此错误消息完全出现。
问题出在其他地方:
q
超出了要保存在int
中的有能力值的范围,因为在循环中:
while(cent >=25)
{
q++;
left = cent - 25;
}
证明条件的值cent
永远不会减少,因此循环永远不会终止。您只需将cent - 25
分配给left
,cent
本身不变。
顺便说一句,您不需要left
变量。
而是使用:
//Counting coin
while(cent >= 25)
{
q++;
cent = cent - 25;
}
while(cent >= 10)
{
d++;
cent = cent - 10;
}
while(cent >= 5)
{
n++;
cent = cent - 5;
}
while(cent >= 1)
{
p++;
cent = cent - 1;
}
此外:
printf("Dollar %i\n", cent);
是不正确的,因为您尝试打印以美分而不是美元为单位的货币:
printf("Change in Cent: %i\n", cent);
更正的代码:
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int main(void)
{
//Assign value
int q = 0; int d = 0; int n = 0; int p = 0;
int count = 0;
float change;
// Promting user for change.
do
{
change = get_float("Change in Dollar:");
}
while(change < 0);
// Convert cent to dollar.
int cent = round(change * 100);
printf("Change in Cent: %i\n", cent);
//Counting coin
while(cent >= 25)
{
q++;
cent = cent - 25;
}
while(cent >= 10)
{
d++;
cent = cent - 10;
}
while(cent >= 5)
{
n++;
cent = cent - 5;
}
while(cent >= 1)
{
p++;
cent = cent - 1;
}
count = q + d + n + p;
printf("Total amount of coins: %i\n", count);
}