寻找下一个回文

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 与反向比较或将其转发到下一个调用。