2016-03-06 190 views
1

我做了代码的挑战,我发现了一些奇怪的东西,我的代码怎么回事,所以我用C++Javascript与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.

任何人能解释这是怎么回事?

+6

什么时候'primeNumber'返回false?也许是一个提示。 – erip

+0

但是你意识到,你使用的主要测试声明许多数字不是首要的,第一个是121? – Ctx

+1

未定义执行达到非void函数末尾而未显式返回值的C++行为。 –

回答

6

这两个程序都有两个主要问题。

  • 如果条件不符合,您永远不会明确地返回false

这些编程语言看不懂你的心,让他们不明白,如果你如果满足条件不返回true,你也想返回false是条件见面。

如果在执行函数时没有返回某些东西,则JS代码返回undefined

您的C++代码实际上调用了未定义的行为(UB),因为执行到达非void函数的末尾而没有返回值。

不幸的是,这些都不能保证false。一个简单的(也许天真?)解决方案就是在结束之前将return false;扑上去。

  • 您的算法错误!

既然你正在努力提高你的技能,我会把这个作为一个练习,但是我会建议你多考虑一个素数的定义。 :)

+0

我的算法大约100正常工作,但经典的新手的错误,会有人输入595295,我的算法是行不通的笑 但感谢的人,不知道JS返回undefined .. 和,还有什么错误我,为什么相同的算法,代码给出不同的结果:S –

+0

@ code_newbie23这很好!如果您还有其他问题,请随时添加另一个问题。 – erip

+0

//评论被编辑 –

相关问题