0

靴下が 1 セント ($0.01) だとします。毎日、靴下に入っている金額が 2 倍になります。したがって、1 日目は 1 セント、2 日目は 2 セント ($0.02)、3 日目は 4 セント ($0.04) というようになります。

doubleEachDay メソッドは、入力引数として double 値の jackpot を取り、0.01 から始まり、毎日 2 倍になる、ジャックポット額に達するか超えるために必要な日数を計算します。このメソッドは、倍増に必要な日数を返します。この値は整数変数 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.02 ではなく 0.0199999999 に等しい場合があります。

double を使用する代わりに、セント数の整数 (1、2、4 など) を使用する必要があります。

amount <= jackpotもう 1 つの理由は、の代わりに書いたことですamount < jackpotamount == jackpotこれは、その日を余分な 1 日としてカウントすることを意味します。

または、 を実行する代わりに、わずかな不正確さを打ち消すamount < jackpotようなことを行うこともできます。jackpot - amount > 0.0000001

于 2013-03-05T01:04:39.717 に答える
-1

金額がジャックポットと完全に等しい日数を数えたいと仮定しました。

ループ条件を次のように変更するだけです。

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