我刚刚开始学习JS,并理解找到一个因素的概念.但是,这段代码就是我到目前为止所拥有的.我有str变量,只输出第一个因素,即2.我试图将每个(int)添加到str作为因素列表.下面的代码片段有什么问题?
function calculate(num) { var str = ""; var int = 2; if (num % int == 0) { str = str + int; int++; } else { int++; } alert(str); } calculate(232);
解决方法
@ Moob的回答是正确的.你必须使用一个循环.但是,您可以通过确定每个数字是偶数还是奇数来加快过程.奇怪的数字不需要像evens那样检查每个数字.可以针对每个其他数字检查奇数.此外,我们不需要检查过去给定数字的一半,因为上半部分都不会起作用.排除0并从1开始:
function calculate(num) { var half = Math.floor(num / 2),// Ensures a whole number <= num. str = '1',// 1 will be a part of every solution. i,j; // Determine our increment value for the loop and starting point. num % 2 === 0 ? (i = 2,j = 1) : (i = 3,j = 2); for (i; i <= half; i += j) { num % i === 0 ? str += ',' + i : false; } str += ',' + num; // Always include the original number. alert(str); } calculate(232);
虽然我理解在您的特定情况下(计算232),计算速度不是一个因素(< - 没有双关语意),但对于较大数量或多次计算可能是一个问题.我在Project Euler problem #12工作,我需要这种类型的功能,计算速度至关重要.