2014-09-04 59 views
-1

我正在嘗試解決問題4 - 項目歐拉和我被困住了。所以我需要我的代碼一點幫助。這是我正在嘗試解決的問題:Palindrom檢查器,錯誤的輸出

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

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

代碼:

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 

int is_palindrom(int number, int revrse) { 
    char str1[6]; 
    char str2[6]; 

    sprintf(str1, "%d", number); 
    sprintf(str2, "%d", revrse); 

    return strcmp(str1, str2); 
} 

int main(void) { 
    int number, revrse; 
    int i, j, temp; 
    int maks; 

    for(i=999;i>99;i--) 
     for(j=999;j>99;j--) { 
      temp = number = i*j; 
      while (temp != 0) { 
       revrse = revrse * 10; 
       revrse = revrse + temp%10; 
       temp = temp/10; 
      } 
      if(is_palindrom(number, revrse)==0 && number > maks) 
       maks = number; 
     } 
    printf("%d",maks); 
    return 0; 
} 
+0

請澄清您的具體問題或添加其他詳細信息,以突出顯示您的需要。正如目前所寫,很難確切地說出你在問什麼。請參閱[如何提問](http://stackoverflow.com/help/how-to-ask)頁面以獲得澄清此問題的幫助。 – usr2564301 2014-09-04 11:05:47

+0

'char str1 [7]; char str2 [7];'...'int maks = 0;'...'revrse = 0; while(temp!= 0){' – BLUEPIXY 2014-09-04 11:41:36

回答

1

要正確地獲得您的號碼的反轉形式,您需要首先爲您的循環的每次迭代設置revrse的初始值爲0,否則行爲未定義。它也有助於設置maks的初始值進行比較。最後,爲什麼使用函數檢查迴文是否可以檢查數字與其相反之間的相等性?

int main() 
{ 
    int number; 
    int i,j,temp; 
    int maks = -1; 
    int revrse; 

    for(i=999;i>99;i--) { 
     for(j=999;j>99;j--) { 
      number = i*j; 
      revrse = 0; 
      temp=number; 
      while (temp != 0){ 
       revrse = revrse * 10; 
       revrse = revrse + temp%10; 
       temp = temp/10; 
      } 
      if(number == revrse) { 
       if(number > maks) { 
        maks = number; 
       } 
      } 
     } 
    } 
    printf("%d",maks); 
    return 0; 
} 
+0

感謝您的幫助。我很困惑,爲什麼它不能正常工作,我錯過了初衷。那2個整數。 – korxz 2014-09-04 13:15:16

5

revrse VAR未初始化所以有它的垃圾。記得總是初始化一個變量!

2

補充從@kleszcz答案,revrse必須始終在while循環開始前初始化,否則將保持前值(和垃圾在第一次迭代,因爲他聰明地指出)。

另一個問題是您不需要is_palindrome函數。你可以直接檢查數字是否相等。