2010-11-30 52 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