2017-02-09 10 views
0

Я изучил алгоритм факторизации чисел в C++ и Java, теперь решил «перевести» его в JS. Вот мой код:Оценить число в Javascript

<!DOCTYPE HTML> 
<html> 
<head> 
    <title>Factorization</title> 
    <script> 
function fact(num) 
{ 
    var b = 2; 
    while (num > b){ 
    while(num%b==0){ 
    num/=b; 
    return b; 
    } 
    b++; 
    if(num==b){ 
    return b; 
    } 
    } 
} 
    </script> 
</head> 

<body> 
<form name="f1"> 
    Enter the Number :<input type="number" name="txt1"><br> 
    <input type="button" value="Factorize" onclick="alert('The answer is ' + fact(txt1.value))"> 
    </form> 
</body> 
</html> 

Что не так? Он оповещает только 1-го кратного.

P/SA алгоритм работы в C++ является:

#include<iostream> 
using namespace std; 

int main(){ 
    int a; 
    cin >> a; 
    int b=2; 
    while(a>b){ 
     while(a%b==0){ 
      a/=b; 
      cout << b << endl; 
     } 
     b++; 
     if(a==b){ 
      cout << b << endl; 
     } 
    } 
} 
+0

Вы вызываете 'return' заявление, когда будет найден первый фактор. Поэтому, естественно, программный контроль выходит из функции. Вместо этого сохраните факторы в массиве и верните весь массив в конце. –

ответ

1

Ответный оператор выходит из функции как указал @Blaze Sahlzen, рассмотрим построение и возвращает строку вместо:

function fact(num) 
{ 
    let b = 2; 
    let ans = "\n"; 
    while (num > b){ 
     while(num%b==0){ 
      num/=b; 
      ans += b + '\n'; 
     } 
     b++; 
     if(num==b){ 
      ans += b + '\n'; 
     } 
    } 
    return ans; 
} 
2

You выходят из функции с первого раза. Вы можете взглянуть на приведенный ниже код, это поможет вам.

function fact(num) 
 
{ 
 
    var b = 2; 
 
\t var factors =1; 
 
\t if(num==b){ 
 
     return b; 
 
    } 
 
    while (num > b){ 
 
     if(num % b == 0) 
 
\t { 
 
\t \t factors +=','+b; 
 
\t } 
 
\t b++; 
 
    } 
 
    factors +=','+num; 
 
    return factors; 
 
}
<form name="f1"> 
 
    Enter the Number :<input type="number" name="txt1"><br> 
 
    <input type="button" value="Factorize" onclick="alert('The answer is ' + fact(txt1.value))"> 
 
    </form>