1到n整數中1出現的次數

2021-07-11 19:54:17 字數 722 閱讀 5199

1. 分析

如果 n = 12  ,即 1 - 12 中含有1 的數有:1 , 10 , 11, 12 則1出現的次數為 5 

假如計算 1 - 31245 怎麼計算

第一步 :分為兩段 1 -  1245  和 1246 - 31245

第兩步: 分別計算這兩段中1出現的次數,最後結果相加

首先計算1246 - 31245 這一段的1出現的次數(三種情況):

一,最高位是1時 , 即 10000 - 19999 出現了 (10 ^4) 個1

二 ,假設此時輸入的不是31245 而是 11245 ,那麼計算最高位為1時,就不能像第一種情況那樣計算

計算的是 10000 - 11245 ,最高位為1,出現的次數為(12456)

三,除最高位外,其他位為1的次數:

此時就能夠明白為什麼那樣分為兩段了

1246 - 31245 其實等價於(10000 - 19999)

(20000 - 29999)

(30000 - 31245 31246 - 39999)

(1246 - 9999 10000 - 31245)  有助於理解為什麼這樣排列組合

可以看到除了最高位外,就剩下4位,排列組合它們就行了,從4位中選一位為1,有四種可能,其他三位都是

從0 - 9 中選有10中可能 

可以計算到 除最高位外,其他位為1的次數:3 * 4 * (10^3)

注意上面(有三段)

整數1到n中1出現的次數

比如求出1 13的整數中1出現的次數,1 13中包含1的數字有1 10 11 12 13因此共出現6次,把問題更加普遍化,求出任意非負整數區間中1出現的次數 從1 到 n 中1出現的次數 參考自部落格 按位依次計算,計算出現在個位上1的次數,十位上1的次數.對於某一位的1的個數如此計算,比如對980...

整數中1出現的次數(從1到n整數中1出現的次數)

求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。include u...

整數中1出現的次數(從1到n整數中1出現的次數)

時間限制 1秒 空間限制 32768k 題目描述 include using namespace std class solution 求之前的length 1位中含乙個數 int base1 0 int base2 1 for int i 0 i1 i cout cout cout 求從base2...