38744


javaScript勉強中です。超初心者です。よろしくお願いいたします。

もし入力された数字が2から10の間の時、その入力された数字の商が0.000001以下になるまで2で割り続け、小数第6位以下(0.000001)に到達するまで何回割ったかというコードを書いています。例えば7/2を小数第6位まで割り切るのに23回割り算しました。という結果が欲しいです。

以下が自分のコードです。  
このコードが間違っているのはわかっています。まだ途中です。わからないところは：

  1. while文での初期値: 2と10の間のどれかの数字から始まる
  2. 条件は0,000001以下なのか、以上なのか
  3. 入力された数字を2で割った答えが次の分母になるわけですが、そうなるとInputNum++ではない？
  4. もしくは小数点以下の桁数を数える方法の方がいいのか

ご教授お願いいたします。

[code]

    if (InputNum <= 1 ||  InputNum >= 11) {
        alert( 'Please enter an invalid number.' );
    
        let InputNum = (InputNum > 1 && InputNum < 11)
        while (InputNum > 0.000001){
        InputNum = InputNum / 2
        alert( InputNum )
        InputNum++
    
[/code]


CC BY-SA 3.0
2017-10-16T01:46:48.347
38739
2017-10-17T14:26:01.970
2017-10-17T14:26:01.970
4236
25589
question
javascript アルゴリズム
入力された値の商が0.000001以下になるまで割り算


回数を数えるなら専用のカウンタ変数を作りましょう  
カウント以外で値が変更されてしまう変数は使わないことと  
ループに比較する値がいつまでもインクリメントされ、指定以下にならないので無限ループします。

[code]

    function startDivide(){
      //値取得
      var inputNum = document.getElementById("val").value;
      //数値チェック
      if(""==inputNum || !isFinite(inputNum)){ console.log("not numeric"); }
      //数値が2〜10の場合のみ処理
      if( 2 <= inputNum && 10 >= inputNum ){
        //入力値を壊すのも何なので一旦別に保存
        var nowDivide = inputNum;
        //割ったカウントをする変数
        var counter = 0;
        //0.000001を現在値が超えている場合のみループ
        //while( 0.000001 < nowDivide ){ 処理 }
        
        //なんだけど、小数点第６位に到達するまでを数えるならこうじゃないかな？
        //小数点第５位以上の場合のみループ
        while( 0.00001 <= nowDivide){
          //2で割って再格納
          nowDivide /= 2;
          //counterをインクリメントしてからコンソールに表示
          console.log(++counter);
        }
        //結果表示
        console.log("結果："+nowDivide);
        console.log("到達まで、"+counter+"回割った");
      }else{
        //対象外のベース値
        console.log("invalid value");
      }
    }
[/code]

[code]

    <input type="text" id="val" value="" placeholder="割られる値（半角数値のみ）" /><button onclick="startDivide()">割り算開始</button>
[/code]


CC BY-SA 3.0
2017-10-16T02:42:24.847
38741
2017-10-16T02:42:24.847
38739
answer


数学を勉強すべきです。[`log2`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math/log2)と[`ceil`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil)で求めることができます。

[code]

    const count = Math.ceil(Math.log2(InputNum / 0.000001));
    
[/code]

`InputNum = 7`であれば`count = 23`になります。


CC BY-SA 3.0
2017-10-16T03:19:18.207
38744
2017-10-16T03:19:18.207
4236
38739
answer