2016-08-19 19 views
0

私は値を与える変数numを持っています。最初のwhileループの後に値が変更されますが、2番目のwhileループで新しい値を使用しようとすると、最終結果は新しいnumに依存しません。ループ中に変数値が変化しないwhileループ

var a = 1, 
 
    b = 13, 
 
    c = 0, 
 
    p; ///6227020800 /// 48648600 ///1801800 ///1245404160 -> /5 
 

 
function div(p) { 
 
    for (var i = a; i <= b; i++) { 
 
    if (p % i !== 0) { 
 
     c++; 
 
    } 
 
    } 
 
    if (c === 0) { 
 
    return 'YES' 
 
    } 
 
    return 'NO' 
 
} 
 

 
var num = 6227020800; 
 

 
while (div(num) == "YES") { 
 
    num /= 2; 
 
} 
 
num = num * 2; // num === 48648600 
 

 
while (div(num) == "YES") { 
 
    num /= 3; 
 
} 
 

 
num = num * 3; // num should be ///1801800 when num === 48648600 
 

 
while (div(num) == "YES") { 
 
    num /= 5; 
 
} 
 

 
num = num * 5 // finally num should be 360360 when num === 1801800

+0

あなたは決して変数 'p'を使用していません。 – Xufox

+1

これは宣言され使用されていなければ問題にはなりません。 –

+0

真実を表すために '' YES ''や' 'NO" 'のような文字列を使わないでください。それはブール値のためのものです。 –

答えて

1

あなたが達成しようとしているものを私には不明ですが、それはdiv()の非常に最初の実行後、cは遅かれ早かれインクリメントされることをようで、それはなることはありません0。したがって、div()"YES"を返さず、次のwhile -loopsは決して実行されません。

+1

ありがとう!問題は関数の変数にあったので、私は3つの変数を持つ3つの関数を作成しました。c、h、lはすべてwhileループの0に等しくなりました。最良の方法かどうかわかりませんが、 it); –

+0

それぞれの 'while()'ループの前に 'c = 0;'だけするべきでしょうか? – Barmar

1

簡素化divは、次のように:

function div(p) { 
    for (var i = a; i <= b; i++) { 
    if (p % i !== 0) return false; 
    } 
    return true; 
} 

これはローカルで宣言するのを忘れていたc変数を取り除きます。

"YES"または"NO"の代わりに、divからのブール戻り値を処理するように残りのプログラムを変更してください。

関連する問題