下一个回文发生器

时间:2018-12-23 08:33:59

标签: c++

我正在寻找下一个回文编号。我正在尝试调用一个名为fun()的函数以检查数字是否为回文数。我的代码未按预期工作...任何帮助将不胜感激。

#include<iostream>
using namespace std;
bool fun(int n) {
    int m=n,r,re=0;
    while(n!=0) {
         r=n%10;
         re=re*10+r;
         n=n/10;
    }
    if(re==m) {
        return true;
    }
    else { 
        return false;
    }
}

int main() {
     int t;
     cin>>t;
     while(t--)//no of test cases
     {
         int n;
         cin>>n;
         n=n+1;
         if(fun(n)==true) {
             cout<<n<<"\n";// should print a number
             continue;
         }
         else {
             n=n+1;

             fun(n);// call for next number to be Palindrome
         }
     }
}
// if input : 808 output be 818 to be displayed on screen..

1 个答案:

答案 0 :(得分:1)

循环的逻辑全错了。您需要两个循环,外部循环用于测试用例,内部循环用于查找下一个回文。像这样

int main()
{
    int test_cases;
    cin >> test_cases;
    for (int i = 0; i < test_cases; ++i)
    {
        int num;
        cin >> num;
        num = num + 1;
        while (!is_palindrome(num))
        {
            num = num + 1;
        }
        cout << num << "\n";
    }
}

我已经重命名了您的一些变量和函数。诸如tnfun之类的名称是不合适的。选择好的变量名有助于理解您自己的代码,更不用说其他任何人了。

请注意内部循环,它会循环运行直到,直到找到回文,这就是为什么不使用!is_palindrome(num)的原因。找到回文后,退出内部循环,然后才打印数字。我认为此逻辑是您的主要错误,您在确实需要if循环的地方使用了while

我尚未检查您的回文测试功能。那里也可能有错误。