[英]Javascript vs C++, same code, different result, why is that?
我在进行代码挑战,发现代码中发生了一些奇怪的事情,所以我用C ++来运行它
function sumPrimes (num)
{
var sum=0;
for(var i=2; i<num; i++)
{
if(primeNumber(i)===true)
sum+=i;
}
return sum;
}
function primeNumber (i)
{
if(i==2 || i==3 || i==5 || i==7)
return true;
if(i%2!=0 && i%3!=0 && i%5!=0 && i%7!=0)
return true;
}
sumPrimes(977);
这给了我107812的结果,但是当我用C ++进行同样的操作时
#include <iostream>
using namespace std;
bool primeNumber(int);
int sumPrimes(int);
int main()
{
int n;
cout << "n: ";
cin >> n;
cout << "Sum : " << sumPrimes(n) << endl;
system("PAUSE>=0");
}
int sumPrimes(int n)
{
int sum = 0;
for (int i = 2; i < n; i++)
{
if (primeNumber(i) == true)
sum += i;
}
return sum;
}
bool primeNumber(int i)
{
if (i == 2 || i == 3 || i == 5 || i == 7)
return true;
if (i % 2 != 0 && i % 3 != 0 && i % 5 != 0 && i % 7 != 0)
return true;
}
结果是108583。
谁能解释这是怎么回事?
两种程序都有两个主要问题。
false
! 这些编程语言看不懂你的心,让他们不明白,如果你不返回true
,如果条件满足,你也想返回false
的条件没有被满足。
如果执行函数时未返回任何内容,则您的JS代码将返回undefined
。
您的C ++代码实际上调用了未定义行为(UB),因为执行已到达非void函数的末尾而没有返回值。
不幸的是,这些都不保证是false
。 一个简单的(也许是幼稚的?)解决方案是只将return false;
设为return false;
在卷曲结束之前。
由于您正在尝试提高自己的技能,因此我将不做这项练习,但建议您多考虑一下质数的定义。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.