2012-10-23 28 views
-1

我想弄清楚這段代碼有什麼問題,它應該打印所有從1到100,000的迴文數字(我知道它有很多數字)。我是新來的,我認爲這可能是一個簡單的修復,但我無法弄清楚,謝謝。C++中所有從1到100,000的迴文數字

當我運行該程序時,它只是給出:「100000不是迴文.............................. .................................................. ......................「

(它應該打印的數字如:111,121,131,141 .....直到100000)

#include<stdio.h> 
#include<conio.h> 

int main() 
{ 
    int n=0, reverse = 0, temp=0, i=0; 
    n=100000; 
    for(i=1; i<n; i++) 
    { 
     temp = i; 
     while(temp != 0) 
     { 
      reverse = reverse * 10; 
      reverse = reverse + temp % 10; 
      temp = temp/10; 
     } 

     if(i == reverse) 
     printf("%d", n); 
     else 
     printf("."); 
    } 
    getch(); 
    return 0; 
} 
+6

這將是嘗試在調試器中逐步瀏覽代碼以查看實際情況的好時機(提示:代碼中至少有一個相當明顯的錯誤 - 如果您已經看不到它,那麼它應該成爲當你進入while循環時顯而易見)。 –

+1

啓動調試器,放置一些斷點,學習! – jpinto3912

+0

您可能必須使用字符串來正確地轉換數字:http://stackoverflow.com/questions/4166886/reverse-of-a-number – andre

回答

0

在調試中,第二次反轉該數字並聲明反轉兩次會使您回到相同數字。

int reverse = doReverse(temp); 
assert(temp == doReverse(reverse)); 

你會發現你的錯誤。

+0

這個答案有一些很好的建議。將倒車功能分成它自己的功能,並執行測試以確保其正常工作。但有一點需要注意:如果你將一個以零結尾的數字進行雙反轉,它將不會返回原始數字。所以測試方法應該跳過這些。 – Kevin

2

你在你的代碼2個明顯的缺陷:

  1. 不要清除reverse每次迭代所以從以前的迭代值積累和決勝算法之前。
  2. printf中,您應輸出當前選中的號碼,而不是n

另一種現代C++時尚風格提示:

  1. 變量聲明爲本地越好。你可以在循環中聲明它們,認真!例如。 tempreverse應在while之前申報,i應在for()之內聲明。
  2. 使用*=-=+=代替=

    reverse *= 10; 
    reverse += temp % 10; 
    temp /= 10; 
    
  3. 使用std::cout而不是 「老好C」 printf()
+1

爲什麼你應該1)在儘可能小的範圍內聲明變量,以及2)給變量賦予描述性名稱,比如'maxNumber'而不是'n'。 – Kevin

+0

可能只是簡單的'C'?變量聲明,使用的類型,函數,包括 - 一切都是'C'。 – Lol4t0

+0

@ Lol4t0 OP標記爲C++。除了'std :: cout'外,大部分提示都適用於現代'C' – Rost

0
#include <iostream> 
#include <algorithm> 
#include <sstream> 

using namespace std; 

int main(int argc, char* argv[]) 
{ 
    string lStr; 

    for (int lIter = 1; lIter <= 100000; ++lIter) { 
    stringstream lStrS; 
    lStrS << lIter; 
    lStr = lStrS.str(); 

    string lRevStr = lStr; 
    reverse(lRevStr.begin(), lRevStr.end()); 

    if (lRevStr == lStr) { 
     cout << lStr << endl; 
    } 
} 

}

這是一個例子一種方法來做到這一點。

相關問題