0

假设您的袜子中有 1 美分(0.01 美元)。每天,你袜子里的钱都会翻倍。因此,第一天你有 1 美分,第二天你有 2 美分(0.02 美元),第三天你有 4 美分(0.04 美元),以此类推。

doubleEachDay 方法将 double 值 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 天。谢谢

4

2 回答 2

6

原因是浮点数不准确。例如,0.01*2 可能等于 0.0199999999 而不是 0.02。

不要使用双精度数,您应该使用整数和美分数,例如 1、2、4 等等。

另一个原因是你写amount <= jackpot的不是amount < jackpot. 这意味着您会将这一天算作amount == jackpot额外的一天。

或者,amount < jackpot您可以做一些事情jackpot - amount > 0.0000001来抵消轻微的不准确性,而不是做 。

于 2013-03-05T01:04:39.717 回答
-1

我假设您想计算金额完全等于头奖的天数。

只需将循环条件更改为:

while (amount != jackpot)...
于 2013-03-05T01:06:20.270 回答