回文數 第N個回文數

2021-09-06 19:15:41 字數 1113 閱讀 4215

判斷回文數還是不難,如果能轉為字串就更簡單了。

如果是求第n個回文數呢。

12321是乙個回文數,這裡先考慮一半的情況。

回文數的個數其實是有規律的。如:

1位回文數: 9個

2位回文數: 9個

3位回文數: 90個

4位回文數: 90個

5位回文數: 900個

6位回文數: 900個 …

我們看到9、90、900,是不是很有規律,那是什麼原因?很簡單,我們把回文數拆開兩半

[123

321]來看。兩半的變化一樣的,那我們只算其中一半就行了。首位不能是0,所以左半最小為

100,最大為999,共有999-100=900個,如此類推。

所以我們可以基於以下原則:

1、 回文數的數字每增長2,回文數的個數為原來的10倍。如從個位回文數到百位回文數,個數

從9個變為90個。

2、 個位回文數的個數是9,1、2、3、…、9。

static long find(int index) 

w++; //數字加一

if(count + number > index) //回文數大於查詢的回數,跳出

break;

count += number; //回文數加上當前數字上的回文數

}index -= count; //在當前數字上的位置。如w=5,index=50,則萬位上的第50個回文數是我們所求

for(int i = 0; i < (w-1) / 2; i++)

half = h + index; //回文數的左半邊,如100 + 50 = 150

res = half;

if(w%2 != 0) //如果為奇數,則中間那個數不必算入右半邊了!

half /=10;

while(half != 0)

return res;

}

判斷回文數

如果乙個數的反向倒置數和它的順向數一樣,那麼這個數稱為回文數。編寫乙個測試程式,提示使用者輸入乙個整數值,然後報告這個數是不是回文數。我先後一共寫了三個函式。方法一 由於題目要求輸入的是整數值,所以按照整數的方法倒置數字,與原數比較即可。public class palindrom public s...

特殊回文數

123321是乙個非常特殊的數,它從左邊讀和從右邊讀是一樣的。輸入乙個正整數n,程式設計求所有這樣的五位和六位十進位制數,滿足各位數字之和等於n 輸入格式 輸入一行,包含乙個正整數n。輸出格式 按從小到大的順序輸出滿足條件的整數,每個整數佔一行。思路 看到網上的乙個 學習了,但提交到藍橋試題才20分...

雙基回文數

記錄下寫的 和題目方便自己不會忘記 進製函式含借鑑 問題描述 如果乙個正整數n至少在兩個不同的進製b1和b2下都是回文數 2 b1,b2 10 則稱n是雙基回文數 注意 回文數不能包含前導0 輸入正整數s 10 6,輸出比s大的最小雙基回文數。樣例輸入 1600000 樣例輸出 1632995 分析...