假设你的袜子里有1美分(0.01美元)。每一天,你的口袋里的钱都会翻倍。因此,第一天你有1美分,第二天你有2美分(0.02美元),第三天你有4美分(0.04美元),以此类推。
doubleEachDay方法将一个双精度值jackpot作为其输入参数,并计算达到或超过大奖金额所需的天数,从0.01开始,每天加倍。该方法返回加倍所需的天数;该值应存储在整数变量numDays中。
完成下面的doubleEachDay方法。
这是我的代码
public int doubleEachDay(double jackpot) {
double amount = 0.01;
int numDays = 0;
while(amount <= jackpot){
amount=(amount*2);
numDays++;
}
return numDays;
}我的代码总是比实际答案多产生1天。谢谢
发布于 2013-03-05 09:04:40
原因是浮点数是不准确的。例如,0.01x2可能等于0.0199999999而不是0.02。
而不是使用双精度,你应该使用一个整数与美分的数量,所以1,2,4,等等。
另一个原因是你写的是amount <= jackpot而不是amount < jackpot。这意味着您将把amount == jackpot的这一天算作额外的一天。
或者,您可以执行类似jackpot - amount > 0.0000001的操作来抵消轻微的不准确性,而不是执行amount < jackpot。
发布于 2013-03-05 09:06:20
我假设你想要计算金额完全等于大奖的天数。
只需将循环条件更改为:
while (amount != jackpot)...https://stackoverflow.com/questions/15214002
复制相似问题