1155 回文三位數

2022-05-30 17:00:11 字數 1395 閱讀 3314

題目:如果乙個數從左邊讀和從右邊讀都是同乙個數,就稱為回文數。例如6886就是乙個回文數,求出所有的既是回文數又是素數的三位數。

先放**:

#include#include

using

namespace

std;

bool iszhi(inta)

return

true;}

intmain()

}

iszhi返回引數是否為質數。main中i/100和i%10分別獲取i的第三位和第一位。

然後完美通關!

怎麼還有?正文

開始很明顯,上述**只適用於三位數。更高位數就無能為力了。

於是,在我苦思冥想並且嫖了網上幾段**後,我編寫了更加通用的**。

思路:從數字的第一位和最高位分別向中間逼近,遇到不同的數字則表明不是回文數。

於是,我先寫了獲取數字位數的函式:

int get_length(int

a)

const

int _leng=leng;

return

_leng;

}

所得數字不斷除以10,每除一次位數+1.除到0則停止,此時代表所有的位數都已算盡。

upd:2020.7.6:竟然現在才發現log一下就行,可惜當時還沒學

考慮到可能需要常量,我進行了常量轉化。當時第一版我使用的是字串儲存數字,但不太好使放棄了。這個常量轉化可以忽略了。

然後是獲取某乙個數字(第乙個形參)的某一位(第二個形參)的數字。

int getcertainnumofint(int a,int

num)

int r=a/ten%10

;

return

r;}

以12345為例,假設我們要獲取第3位數,此時ten變數的值是100,12345/100=123,再用10對123取餘,獲得3即為第三位數。

最後是檢驗回文數的函式:

bool isback(int

a)

return

true

;}

第六行是重點,i為從低位到高位的檢查,len是長度。len-i+1是從高位到低位的檢查(+1是因為,i原先就是1,不加1會使函式從數字次高位開始檢查,漏掉最高位)。一旦檢查到不同的數字就返回假。若所有數字都檢查完畢,還沒有發現不同的數字,則證明是回文數,返回真。

或許可以將第四行的len改為len/2,因為兩個檢查量到中間時就已經能判斷是否為回文數了。

最後是main:

int

main()

}

此時的p可擴充套件到任意正整數,不受位數限制。

真♦完美通關!

特殊三位數

作 者 李家豪 完成日期 2013 年11月13日 版 本 號 v1.0 問題描述 請輸出滿足條件n a b c 的所有三位數n,其中,a b c分別是n的百 十 個位數。要求用自定義函式實現求階乘。樣例輸入 樣例輸出 145 問題分析 includeusing namespace std int ...

尋找三位數

問題描述 將1,2,9共9個數分成三組,分別組成三個三位數,且使這三個三位數構成 1 2 3的比例,試求出所有滿足條件的三個三位數。例如 三個三位數192,384,576滿足以上條件。輸入格式 無輸入輸出格式 輸出每行有三個數,為滿足題設三位數。各行為滿足要求的不同解。public class ma...

組合三位數

組合三位數 4分 題目內容 將1到9這九個數字分成三個3位數,要求第乙個3位數,正好是第二個3位數的1 2,是第三個3位數的1 3。問應當怎樣分,編寫程式實現。輸入格式 無 輸出格式 d,d,d n 注意 輸出的順序為第乙個3位數,第二個3位數,第三個3位數 注意 為避免出現格式錯誤,請直接拷貝貼上...