寻找下一个回文
Finding next palindrome
我正在尝试解决与回文相关的问题,即:
"对于每一个K,输出大于K的最小回文。" (其中 K 是用户输入的整数)
我使用了递归方法,但它只是抛出一个错误,指出 SEGMENTATION FAULT....
我的方法...
#include <iostream>
using namespace std;
int pal(int x){
int rev=0;
while(x!=0){
int rem=0;
rem=x%10;
rev=rev*10 + rem;
x=x/10;
}
if(rev==x)
return x;
else
pal(x+1);
}
int main() {
int T;
cin>>T;
while(T--){
int N;
cin>>N;
cout<<pal(N+1)<<endl;
}
return 0;
}
请指导我哪里做错了。
而不是写作
else {
pal(x+1);
}
写return pal(x+1);
如果第一个 x+1 不是回文,您当前的 pal 函数不会 return 任何值。根据@igorTandentik 在评论中写的内容,这应该可以解决问题。
编辑 1:
您的代码存在严重缺陷。您在 while 循环中使 x 为零,然后将其与 reverse 进行比较,这永远不会是真的。现在你用 x+1 调用 pal,它等同于 pal(1)。您在递归调用中重复同样的错误。因此你进入了一个无限循环。
在您的函数中复制 x,然后使用该副本反转 x。使用 x 与反向比较或将其转发到下一个调用。
我正在尝试解决与回文相关的问题,即:
"对于每一个K,输出大于K的最小回文。" (其中 K 是用户输入的整数)
我使用了递归方法,但它只是抛出一个错误,指出 SEGMENTATION FAULT....
我的方法...
#include <iostream>
using namespace std;
int pal(int x){
int rev=0;
while(x!=0){
int rem=0;
rem=x%10;
rev=rev*10 + rem;
x=x/10;
}
if(rev==x)
return x;
else
pal(x+1);
}
int main() {
int T;
cin>>T;
while(T--){
int N;
cin>>N;
cout<<pal(N+1)<<endl;
}
return 0;
}
请指导我哪里做错了。
而不是写作
else {
pal(x+1);
}
写return pal(x+1);
如果第一个 x+1 不是回文,您当前的 pal 函数不会 return 任何值。根据@igorTandentik 在评论中写的内容,这应该可以解决问题。
编辑 1:
您的代码存在严重缺陷。您在 while 循环中使 x 为零,然后将其与 reverse 进行比较,这永远不会是真的。现在你用 x+1 调用 pal,它等同于 pal(1)。您在递归调用中重复同样的错误。因此你进入了一个无限循环。 在您的函数中复制 x,然后使用该副本反转 x。使用 x 与反向比较或将其转发到下一个调用。