Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中从1到100000的所有回文数+;_C++_Palindrome - Fatal编程技术网

C++ C+中从1到100000的所有回文数+;

C++ C+中从1到100000的所有回文数+;,c++,palindrome,C++,Palindrome,我试图找出这段代码的错误,它应该打印从1到100000的所有回文数字(我知道它有很多数字)。我是新来的,我想这可能是一个简单的解决办法,但我想不出来,谢谢 当我运行程序时,它只给出:“100000不是回文” (它应该打印数字,比如:111、121、131、141……直到100000) #包括 #包括 int main() { int n=0,reverse=0,temp=0,i=0; n=100000; 对于debug中的(i=1;i),再次反转数字,并断言反转两次会使您回到相同的数字 int

我试图找出这段代码的错误,它应该打印从1到100000的所有回文数字(我知道它有很多数字)。我是新来的,我想这可能是一个简单的解决办法,但我想不出来,谢谢

当我运行程序时,它只给出:“100000不是回文”

(它应该打印数字,比如:111、121、131、141……直到100000)

#包括
#包括
int main()
{
int n=0,reverse=0,temp=0,i=0;
n=100000;

对于debug中的(i=1;i),再次反转数字,并断言反转两次会使您回到相同的数字

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

您将发现错误。

您的代码中有两个明显的缺陷:

  • 在每次迭代之前,您没有清除
    reverse
    ,因此先前迭代的值正在累积并破坏算法
  • printf
    中,您应输出当前检查的编号,而不是
    n
  • 另一个现代C++流行风格提示:

  • 尽可能在本地声明变量。您可以在循环内声明变量,认真地说!例如,
    temp
    reverse
    应在
    之前声明,而
    i
    应在
    for()
    语句内声明
  • 使用
    *=
    -=
    +=
    代替
    =

    reverse *= 10;
    reverse += temp % 10;
    temp /= 10;
    
  • 使用
    std::cout
    而不是“old good C”
    printf()
  • #包括
    #包括
    #包括
    使用名称空间std;
    int main(int argc,char*argv[])
    {
    字符串lStr;
    
    对于(int-l=1;l这将是一个尝试在调试器中单步执行代码以查看实际情况的好时机(提示:代码中至少有一个相当明显的错误-如果您还看不到它,那么当您进入while循环时,它应该很明显)。启动调试器,放置一些断点,然后进行研究!您可能必须使用字符串来正确转换数字:1)在尽可能小的范围内声明变量,以及2)这两个很好的示例对变量进行描述性的命名,如代码> Max No./COD>,而不是<代码> N>代码>。可能是纯代码> C++ >代码>变量声明、类型、函数,包括->代码> C/<代码>。@ LoL4T0 OP标记了C++。除“代码> STD::CUT/<代码>之外的大多数提示对于现代<代码> C <代码>都是有效的。此答案中的建议。将反转功能分离为其自身的功能,并执行测试以确保其工作。但有一个警告:如果将以零结尾的数字反转两次,它将不会返回原始数字。因此测试方法应跳过这些。
    reverse *= 10;
    reverse += temp % 10;
    temp /= 10;
    
    #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;
        }
     }