題目:如果乙個數從左邊讀和從右邊讀都是同乙個數,就稱為回文數。例如6886就是乙個回文數,求出所有的既是回文數又是素數的三位數。
先放**:
#include#includeusing
namespace
std;
bool iszhi(inta)
return
true;}
intmain()
}
iszhi返回引數是否為質數。main中i/100和i%10分別獲取i的第三位和第一位。
然後完美通關!
怎麼還有?正文
開始很明顯,上述**只適用於三位數。更高位數就無能為力了。
於是,在我苦思冥想並且嫖了網上幾段**後,我編寫了更加通用的**。
思路:從數字的第一位和最高位分別向中間逼近,遇到不同的數字則表明不是回文數。
於是,我先寫了獲取數字位數的函式:
int get_length(inta)
const
int _leng=leng;
return
_leng;
}
所得數字不斷除以10,每除一次位數+1.除到0則停止,此時代表所有的位數都已算盡。
upd:2020.7.6:竟然現在才發現log一下就行,可惜當時還沒學
考慮到可能需要常量,我進行了常量轉化。當時第一版我使用的是字串儲存數字,但不太好使放棄了。這個常量轉化可以忽略了。
然後是獲取某乙個數字(第乙個形參)的某一位(第二個形參)的數字。
int getcertainnumofint(int a,intnum)
int r=a/ten%10
;
return
r;}
以12345為例,假設我們要獲取第3位數,此時ten變數的值是100,12345/100=123,再用10對123取餘,獲得3即為第三位數。
最後是檢驗回文數的函式:
bool isback(inta)
return
true
;}
第六行是重點,i為從低位到高位的檢查,len是長度。len-i+1是從高位到低位的檢查(+1是因為,i原先就是1,不加1會使函式從數字次高位開始檢查,漏掉最高位)。一旦檢查到不同的數字就返回假。若所有數字都檢查完畢,還沒有發現不同的數字,則證明是回文數,返回真。
或許可以將第四行的len改為len/2,因為兩個檢查量到中間時就已經能判斷是否為回文數了。
最後是main:
intmain()
}
此時的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位數 注意 為避免出現格式錯誤,請直接拷貝貼上...