这是问题所在:
2520是可以除以1至10中的每个数字而没有任何余数的最小数字。 可以被1到20的所有数字整除的最小正数是多少?
这是我的代码:
var calculation = function(){
var result = 0;
for(var i = 20; i == 10000000000000; i++){
for(var e = 2; e == 20; e++){
if(i % e == 0){
result = i;
}
}
}
alert(result);
}
calculation();
问题是程序只输出0
。
答案 0 :(得分:2)
有更多优雅的方法可以解决这个问题,但要解决当前问题,for
- 循环的'条件'部分需要返回true
才能继续循环,不是当你想要阻止它。因此,您的for
循环应如下所示:
for(var i = 20; i <= 10000000000000; i++){
for(var e = 2; e <= 20; e++){
...
}
}
在循环中,你有另一个问题。如果result
您正在设置i % e == 0
,但您从未定义过止损案例。换句话说,result
将是您通过该测试的最后一个数字,即使它未通过i
和e
的所有其他测试。你必须做这样的事情:
for(var i = 20; i <= 10000000000000; i++){
bool found = true;
for(var e = 2; e <= 20; e++){
if (i % e != 0) {
found = false;
break; // stop testing other divisors
}
}
if (found) {
return i;
}
}
答案 1 :(得分:1)
在这一行:
for(var i = 20; i == 10000000000000; i++){
i == 10000000000000
位意味着循环应该只在i
等于10000000000000
时运行 - 它永远不会,因为它已经不是那个开始了。
我想你打算写i <= 10000000000000
。
(您的代码还存在其他问题 - 我建议使用更小的数字进行调试,这样您就可以在不崩溃浏览器的情况下解决它们 - 但这应该可以帮助您开始。)
答案 2 :(得分:0)
在JavaScript中,Number.MAX_SAFE_INTEGER应该是可能的最大数字。
答案 3 :(得分:0)
// 请在下面的 JS 程序中检查。
var count=0,num=1;
while(count<20){
for(var i=1;i<=20;i++){
if(num % i==0){
count++;
}
else{
count=0;
break;
}
}
if(count==20){
console.log(num);
break;
}
else
{
num++;
}
}
答案 4 :(得分:-1)
首先,选择一种你能解决这些问题的语言。我很确定在每一种语言中,for循环条件==
并不意味着小于或等于所以可能首先研究任何编程语言的基础知识。
其次假设你在for循环中输入<=
,你的内部for循环逻辑是有缺陷的。如果你是新手,那么最合乎逻辑的做法就是写下一些东西:
if (i%2==0 && i%3==0 && i%4 == 0 && ... && i%20==0)
alert(i);`
实现此目的的一种方法是使用布尔值的帮助,你可以这样做:
for (var i=20; i<=1000000000; i++) { //Your upper bound is wayy too high.
var done = true;
for (var e = 2; done && e <= 20; e++) { //Be more efficient.
done = done && (i % e == 0);
}
if (done) {
alert(i);
return;
}
}