Python實現(xiàn)整數(shù)中1出現(xiàn)的次數(shù)(從1到n整數(shù)中1出現(xiàn)的次數(shù))

題目描述

求出1~13的整數(shù)中1出現(xiàn)的次數(shù),并算出100~1300的整數(shù)中1出現(xiàn)的次數(shù)?為此他特別數(shù)了一下1~13中包含1的數(shù)字有1、10、11、12、13因此共出現(xiàn)6次,但是對于后面問題他就沒轍了。ACMer希望你們幫幫他,并把問題更加普遍化,可以很快的求出任意非負整數(shù)區(qū)間中1出現(xiàn)的次數(shù)

(大致想到是找規(guī)律,但是自己思路很混亂,故記錄一下答案中的清晰思路)

設(shè)N = abcde ,其中abcde分別為十進制中各位上的數(shù)字。如果要計算百位上1出現(xiàn)的次數(shù),它要受到3方面的影響:百位上的數(shù)字,百位以下(低位)的數(shù)字,百位以上(高位)的數(shù)字。

① 如果百位上數(shù)字為0,百位上可能出現(xiàn)1的次數(shù)由更高位決定。比如:12013,則可以知道百位出現(xiàn)1的情況可能是:100~199,1100~1199,2100~2199,,...,11100~11199,一共1200個。可以看出是由更高位數(shù)字(12)決定,并且等于更高位數(shù)字(12)乘以 當前位數(shù)(100)。

② 如果百位上數(shù)字為1,百位上可能出現(xiàn)1的次數(shù)不僅受更高位影響還受低位影響。比如:12113,則可以知道百位受高位影響出現(xiàn)的情況是:100~199,1100~1199,2100~2199,,....,11100~11199,一共1200個。和上面情況一樣,并且等于更高位數(shù)字(12)乘以 當前位數(shù)(100)。但同時它還受低位影響,百位出現(xiàn)1的情況是:12100~12113,一共114個,等于低位數(shù)字(113)+1。

③ 如果百位上數(shù)字大于1(2~9),則百位上出現(xiàn)1的情況僅由更高位決定,比如12213,則百位出現(xiàn)1的情況是:100~199,1100~1199,2100~2199,...,11100~11199,12100~12199,一共有1300個,并且等于更高位數(shù)字+1(12+1)乘以當前位數(shù)(100)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容