2014-04-02 66 views
-3

我試圖解決Project Euler #4給出的問題:C++歐拉計劃#4碼錯誤

迴文數讀取相同的兩種方式。由兩個2位數字產品製成的最大回文數是9009 = 91×99.

查找由兩個3位數字產品製成的最大回文數。

我的解決方案中沒有任何編譯錯誤...但程序沒有提供正確的輸出。我想我在定義布爾函數時犯了一些錯誤。

任何想法?

#include <iostream> 
#include <math.h> 
using namespace std; 

bool isPalindrome(int z) {  
    // store z in t to compare it later with its reversed number 
    int t = z; 
    int rev = 0; 

    // This while loop reverses the number 
    while (z > 0) { 
     int dig = z % 10; 
     rev = rev * 10 + dig; 
     z = z/10; 
    } 

    if (t == rev) 
     return true; 
    else 
     return false; 
} 

void palindrome(int k) { 
    int b = 0; 
    int a = pow(10, k); 

    // calculate product of two numbers 
    // replace it if it's palindrome and greater than previously stored value b 

    // for loop to calculate product of all 3 (in general k) digit numbers 
    for (int i = pow(10,k-1); i = pow (10,k) - 2; i++) { 
     for (int j = i; j = pow (10,k) - 2; j++) { 
      int c = i * j;        

     if (isPalindrome(c) && c > b) { 
      b = c; 
      } 
     } 
    } 

    cout << "Largest Palindrome = " << b << endl; 
} 

int main() { 
    int n; 

    cout << "Enter the digit length" <<"\t"; 
    cin >> n; 

    palindrome(n); 

    return 0; 
} 

對於它不工作的例子,我嘗試輸入n = 3,它只是掛起,沒有輸出。我究竟做錯了什麼?

+1

你的意思是什麼「該程序不起作用?」 – Massa

+0

**版主說明**:請保留對主題的評論。關於評論是否不禮貌的爭論是非題的定義。 –

+0

我正在使用devcpp。當我點擊編譯並運行時,輸入控制檯打開。 我把3作爲輸入後,什麼也沒有發生 – user3485318

回答

0

在我看來,你的問題是在該行,

for (int i = pow(10,k-1); i = pow (10,k) - 2; i++) { 

考慮你的循環是怎麼回事終止。