假设你的袜子里有一分钱(0.01美元)。每天你在袜子里加倍的钱。因此,在第一天你有1美分,第二天你有两美分(0.02美元),第三天你有4美分(0.04美元),依此类推。
doubleEachDay方法将double值作为输入参数,并计算达到或超过累积奖金额所需的天数,从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;
}
我的代码比实际答案多生产一天。感谢
答案 0 :(得分:6)
原因是浮点数不准确。例如,0.01 * 2可能等于0.0199999999而不是0.02。
不应使用双精度数,而应使用一个整数,分数为1美分,等等为1,2,4等等。
另一个原因是你写了amount <= jackpot
而不是amount < jackpot
。这意味着您将amount == jackpot
作为额外一天的日期计算。
或者,您可以执行类似amount < jackpot
的操作,而不是执行jackpot - amount > 0.0000001
,以抵消轻微的不准确性。
答案 1 :(得分:-1)
我认为您想要计算金额完全等于累积奖金的天数。
只需将循环条件更改为:
while (amount != jackpot)...