題目描述
求出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)。