1309 例1 6 回文數 Noip1999

2021-10-03 11:01:38 字數 1366 閱讀 8467

1309:【例1.6】回文數(noip1999)

時間限制: 1000 ms 記憶體限制: 65536 kb

提交數: 7074 通過數: 2624

【題目描述】

若乙個數(首位不為零)從左向右讀與從右向左讀都是一樣,我們就將其稱之為回文數。例如:給定乙個 10進製數 56,將 56加 65(即把56從右向左讀),得到 121是乙個回文數。又如,對於10進製數87,

step1: 87+78= 165 step2: 165+561= 726

step3: 726+627=1353 step4:1353+3531=4884

在這裡的一步是指進行了一次n進製的加法,上例最少用了4步得到回文數4884。

寫乙個程式,給定乙個n(2<n<=10或n=16)進製數 m.求最少經過幾步可以得到回文數。如果在30步以內(包含30步)不可能得到回文數,則輸出「impossible」 。

【輸入】

給定乙個n(2<n<=10或n=16)進製數m。

【輸出】

最少幾步。如果在30步以內(包含30步)不可能得到回文數,則輸出「impossible」。

【輸入樣例】

9 87

【輸出樣例】

6思路:n進製運算:

1.當前位由10%改為n%

2.進製處理由/10改為/n

3.其他運算規則不變

4.回文數判斷 需要熟悉

#include

#include

#include

using

namespace std;

int a[

100]

,b[100

],n,count;

//初始化陣列a--使用陣列進行判斷

void

init

(int a)

else}}

//判斷乙個數是否是回文數

intpalindrom

(int a)

}return1;

}//將非回文數進行加法運算

void

addition

(int a)

for(i =

1; i <=a[0]

; i++)if

(a[a[0]

+1]>

0) a[0]

++;//修正新的a位數

}int

main()

//判斷m是否是n進製的回文數字--使用陣列的方式

count=0;

while

(count<=30)

} cout<<

"impossible"

;return0;

}

1309 例1 6 回文數 Noip1999

題目描述 若乙個數 首位不為零 從左向右讀與從右向左讀都是一樣,我們就將其稱之為回文數。例如 給定乙個 10進製數 56,將 56加 65 即把56從右向左讀 得到 121是乙個回文數。又如,對於10進製數87,step1 87 78 165 step2 165 561 726 step3 726 ...

52 回文平方數

52 回文平方數 問題描述 回文數是指從左向右念和從右向左唸都一樣的數。如12321就是乙個典型的回文數。給定乙個進製b 2 輸入說明 共一行,乙個單獨的整數b b用十進位制表示,比如18 輸出說明 每行兩個數字,第二個數是第乙個數的平方,且第二個數是回文數。注意 輸出時,這兩個數都應該以b進製表示...

1282 回文數猜想

problem description 乙個正整數,如果從左向右讀 稱之為正序數 和從右向左讀 稱之為倒序數 是一樣的,這樣的數就叫回文數。任取乙個正整數,如果不是回文數,將該數與他的倒序數相加,若其和不是回文數,則重複上述步驟,一直到獲得回文數為止。例如 68變成154 68 86 再變成605 ...