2012-10-23 23 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; 
    } 
} 

}

这是一个例子一种方法来做到这一点。

相关问题