我正在寻找下一个回文编号。我正在尝试调用一个名为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..
答案 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";
}
}
我已经重命名了您的一些变量和函数。诸如t
,n
和fun
之类的名称是不合适的。选择好的变量名有助于您理解您自己的代码,更不用说其他任何人了。
请注意内部循环,它会循环运行直到,直到找到回文,这就是为什么不使用!is_palindrome(num)
的原因。找到回文后,退出内部循环,然后才打印数字。我认为此逻辑是您的主要错误,您在确实需要if
循环的地方使用了while
。
我尚未检查您的回文测试功能。那里也可能有错误。