2010-11-30 75 views
0

我已经开始使用C++并且在projecteuler.net上摆弄了一些问题。用C++编译器的欧拉 - 编译器不会在100 x 101后处理

我对问题的#4,这里是我的代码:

算法来检查号码是否是回文:

bool forwardCheck(long posPal){ 
long n = posPal; 
long rev = 0; 
long dig; 

    while (posPal > 0){ 
     dig = posPal % 10; 
     rev = rev * 10 + dig; 
     posPal = posPal % 10; 
    } 

    return n == rev; 
} 

主程序:

int main(){ 
long palindrome; 

cout << "We are finding the largest palindrome made from two 3-digit numbers.\n" 
    << "Calculating...\nCalculating...\nDone!\n"; 

for (long i = 100; i < 1000; i++){ 
    for (long j = 100; j < 1000; j++){ 
     long mult = i * j; 
      if (forwardCheck(mult)){ 
       palindrome = mult; 
       //testing function above 
       cout << mult << " is a palindrome!\n"; 
      } else 
       //testing function above 
       cout << mult << " is not a palindrome...\n"; 
    } 
} 


cout << "The largest palindrome composed of two 3 digit numbers is: " << palindrome 
    << endl; 

return 0; 
} 

我在OS X上使用X11作为我的g ++编译器,我的问题是,使用上面的代码,数字达到101,000作为倍数,然后停止并停止。我的问题是:

为什么这样做?我是否无效地接近?

我意识到,另一种方法是从long = 999开始向下迭代,但我已经编码,但在“完成!”之后卡住了。声明(是的,我知道这是有点雄心勃勃的程序,在算法运行之前,但我喜欢乐观:)

由卡住和摊位,我的意思是CPU使用率峰值,但没有写入安慰。

作为一般的边注:

有没有一种方法,我可以通过控制台进行调试,即有它告诉我,它在做什么类似Windows中的echo命令提示符?我是新来OS X太...

+2

调试器是你的朋友 – 2010-11-30 08:37:32

回答

1

看来,它应该是 posPal = posPal/10

例如开始123要使用3为建设倒数,并移动到12

+0

谢谢!它运作良好! – user524839 2010-11-30 08:55:24

2

看一看这段代码:

while (posPal > 0){ 
    dig = posPal % 10; 
    rev = rev * 10 + dig; 
    posPal = posPal % 10; 
    } 

我认为你是在循环底部错估posPal

请尝试用posPal = posPal/10替换。

+0

哇,你们真棒!非常感谢!!这完全解决了它。 :) – user524839 2010-11-30 08:55:08