0

1 から 20 までのすべての数字の lcm を見つける必要があり、このコードを思いつきました。効率は悪いですが、正解よりも2倍多い答えが出てきます。誰か教えてくれませんか?

//variable used to shut off the while loop.
divisable = false;

var i = 2;

//function to prove if the number is a lcm

var isDivisable = function(number){
    for(var i = 2; i<=20; i++){
        if(number%i !== 0){
            divisable = false;
            //  added the break to shut down the function, 
            //  as no other loops need to be counted
            break;
        }else{
            divisable = true;
        }
    }
};    


while(!divisable){
    isDivisable(i);

    i+=2;
}
4

2 に答える 2

1

コードのどこが間違っていたのですか?

isDivisible( whileループdivisibleから) が true に設定されるまで実行を続けます。ここで、ループがすべてを実行します。また、プログラムが何度も実行されてスパズが発生しなくなった後、結果に 2 を追加する while ループを挿入しています。fori+=2isDivisible

直し方?

whileループを削除し、isDivisable手動で呼び出すだけです。

var isDivisable = function(number){
    if (number % 1 == 0) {
    for(var i = 2; i<=20; i++){
        if(number%i !== 0){
            divisable = false;
            //  added the break to shut down the function, 
            //  as no other loops need to be counted
            break;
        }else{
            divisable = true;
            alert(i);
        }
    }else
    {
        alert('Your number is not divisible.');
    }
};    

isDivisable(6); //Replace with a number

その結果i、倍数になります。

その他の注意事項

isDivisibleのように、コードのスペルが間違っていますisDivisable

于 2014-01-06T22:03:46.993 に答える
0

楽しみのために:

[0, 1, 2, 3, 4, 5, 6].map(function(i) {
    if(this % i == 0)
        alert(i);
}, 6);

配列alertに含まれる値 ( [0, . . ., 6]) が、コールバックに渡された値 (この場合は6) の倍数である必要があります。を参照してくださいArray.prototype.map()

http://jsfiddle.net/5nSE4/1/

于 2014-01-06T22:30:07.920 に答える