判斷回文數還是不難,如果能轉為字串就更簡單了。
如果是求第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 分析...