計算1到N的十進制數中1的出現次數

問題描述:給定一個十進制正整數N,寫下從1開始,到N的所有整數,然後數一下其中出現的所有"1"的個數。例如: N = 2,寫下1,2。這樣只出現了1個"1"。 N = 12,寫下1,2,……,12,這樣有5個"1"。 寫一個函數f(N),返回1到N之間出現的"1"的個數,比如f(12) = 5。

 

假設N = abcde,這裏a,b,c,d,e分別是十進制數N的各個數位上的數字。如果要計算百位上出現1 的次數,將受3方面因素影響:百位上的數字,百位以下(低位)的數字,百位(更高位)以上的數字。

情況1:如果百位上的數字爲0,則可以知道百位上可能出現1的次數由更高位決定,比如12 013,則可以知 道百位出現1的情況可能是100-199,1 100-1 199,……,11 100-11 199,一共有1 200個。也就是 由更高位數字(12) 決定,並且等於更高位數字(12)×當前位數(100)。

情況2:如果百位上的數字爲1,則可以知道,百位上可能出現1的次數不僅受更高位影響,還受低位影響, 也就是由更高位和低位共同決定。例如12 113, 受更高位影響,百位出現1的情況是100-199,1 100 -1 199,……,11 100-11 199,一共有1 200個,和上面第一種情況一樣,等於更高位數字(12)×當前位數(100)。但它還受低位影響,百位出現1的情況是12 100-12 113,一共114個,等於低位數字 (113)+1。

情況3:如果百位上數字大於1(即爲2-9),則百位上可能出現1的次數也僅由更高位決定,比如12 213,則 百位出現1的情況是:100-199,1 100-1 199,……,11 100-11 199,12 100-12 199,共1300個 ,並且等於更高位數字+1(12+1)×當前位數(100)。

 

以12爲例,十位數上爲1,屬於情況2,故十位上出現1的次數=0*當前位數(10)+(2+1)=3;個位數上爲2,屬於情況3,故個位上出現1的次數=(1+1)*當前位數(1)=2。把兩者加起來結果爲5即爲所求。

 

 

發佈了22 篇原創文章 · 獲贊 1 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章