我正在嘗試解決與回文有關的問題,即:
“對于每個 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;
}
請指導我哪里做錯了。
uj5u.com熱心網友回復:
而不是寫
else {
pal(x 1);
}
寫return pal(x 1);
如果第一個 x 1 不是回文,則您當前的 pal 函式不會回傳任何值。根據@igorTandentik 在評論中寫的內容,這應該可以解決問題。
編輯1:
你的代碼有一個嚴重的缺陷。您在 while 回圈中將 x 設為零,然后將其與 reverse 進行比較,這永遠不會是真的。現在你用 x 1 呼叫 pal,相當于 pal(1)。您在遞回呼叫中重復同樣的錯誤。因此,您進入了一個無限回圈。在您的函式中制作 x 的副本,然后使用該副本來反轉 x。使用 x 與反向進行比較或將其轉發到下一個呼叫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/429322.html
