Javascript与C++,相同的代码,不同的结果,这是为什么
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;
。
-
你的算法不正确!
既然你正在努力提高你的技能,我将把这个作为一个练习,但我建议多考虑一下素数的定义。 :)
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么这个程序的结果是3 "born"?和 4 死
- 为什么在递归中使用循环会产生意想不到的结果?
- 为什么我的程序在 O0 和 O2 的优化级别返回不同的结果
- 为什么第二个代码给出了预期的结果,而第一个代码却没有?
- 为什么组合的上限和下限比较的计算结果总是为 true?
- 为什么这两段使用 constexpr、__PRETTY_FUNCTION__ 和 char * 的代码有不同的结果?
- C++向量与 C# 列表.为什么它们会产生不同的结果?
- 为什么'typeid(x) == typeid(y)'的计算结果为 true,其中 'x' 和 'y' 分别是 T 和 T& 类型的 id-表达式?
- 为什么函数 tellg() 没有返回好的结果?
- 双摆返回楠结果.为什么?
- 相机校准结果:为什么与输入相似
- 按回车键后,程序没有输出任何结果.为什么会这样
- 两个明显相似的函数给出了不同的结果.为什么
- 顺序和并行版本给出不同的结果 - 为什么
- 按位运算的意外结果 为什么 (1 | 1 & 2) 给出 1 而不是 2?