【问题标题】:Factorize a number in Javascript在 Javascript 中对数字进行因式分解
【发布时间】:2017-02-09 11:07:11
【问题描述】:

我在 C++ 和 Java 中学习了一种分解数字的算法,现在决定将其“翻译”成 JS。这是我的代码:

<!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>

它有什么问题吗?它只提醒第一个倍数。

P/S 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;
        }
    }
}

【问题讨论】:

  • 找到第一个因素时,您正在调用return 语句。所以自然程序控制退出功能。相反,将因子存储在一个数组中并在最后返回整个数组。

标签: javascript c++ prime-factoring factorization


【解决方案1】:

@Blaze Sahlzen 指出,return 语句退出函数,请考虑构造并返回一个字符串:

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】:

    您在第一个倍数时退出该功能。你可以看看下面的代码,它会对你有所帮助。

    function fact(num)
     {
        var b = 2;
    	var factors =1;
    	if(num==b){
          return b;
        }
        while (num > b){
          if(num % b == 0)
    	  {
    		 factors +=','+b;
    	  }
    	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>

    【讨论】:

      猜你喜欢
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多