首页 > 解决方案 > 1 到 10000 之间的回文数

问题描述

我想编写一个显示 1 到 10000 之间的回文数的程序,我编写了一个脚本,显示用户输入的数字是否是回文数,但是当我添加 for 循环时,它给了我错误的结果我的代码:

#include<iostream>
using namespace std;

int main()
{
 int num, reverse = 0, remainder, temp;

for(num=0;num<1000;num++){

 temp = num; 
 cout << "temp = " << temp << endl;
 while( temp != 0)
 {
  remainder = temp % 10;
  reverse = reverse * 10 + remainder;
  temp = temp / 10;
  cout << "remainder = " << remainder << endl;
  cout << "reverse = " << reverse << endl;
  cout << "temp = " << temp << endl;
 }

 cout << "Reversed number: " << reverse << endl;

 if (num == reverse) 
  cout << "\n" << num << " is a palindrome number." << endl;
 else
  cout << "\n" << num << " is not a palindrome number." << endl;
 }
 return 0;
 }

标签: c++

解决方案


我检查了您的程序并发现了一些缺陷:
1)所有 1 位数字都是回文,因为它们的反转是相同的。
---您的程序没有将它们显示为回文。
2)您不必显示所有详细信息,例如它们的余数和反向。
---显然回文的反转将与原版相同。我们不需要显示非回文。在某些情况下,反向也显示垃圾值。我找不到对用户有任何帮助的理由。

解决方案:-

#include<iostream>
using namespace std;

bool findPalindrome(const int);
int main()
{
    for (int i = 0; i < 10000; i++) {
        if (findPalindrome(i)) {
            cout << "Number " << i << " is a Palindrome!" << endl;
        }
    }
    return EXIT_SUCCESS;    // Return EXIT_SUCCESS is my Specialty :D 
}
bool findPalindrome(const int num) {
    int temp = num;
    int reve = 0;
    while (temp != 0) {
        reve = (reve * 10) + (temp % 10);
        temp /= 10;
    }
    return (reve == num);
}

推荐阅读