求出1~13的整數中1出現的次數,並算出100~1300的整數中1出現的次數?為此他特別數了一下1~13中包含1的數字有1、10、11、12、13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數(從1 到 n 中1出現的次數)。
核心想法: 求每個位上出現1的次數
如求出現在十位上1的次數
十位出現1的所有組合情況 共10個
1011 只算十位出現的1 算1個
……19
關鍵就是有多少種情況見下圖
依次不同位出現次數累加
int front = 0, current =0,behind = 0
;int
uint = 1; //
第i位對應1後i-1個0
for (int i = 1; i <= max_weight; i++)
front = n/(uint*10); //
去掉後i位
current = (n / (uint)) % 10; //
得到第i位
behind = n % (uint); //
只剩后i-1位
if(current == 0
) else
if(current == 1
) else
if (current > 1) }
return
count;
}
劍指offer系列之三十 整數中1出現的次數
題目描述 求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。有一種比...
劍指offer 整數中1出現的次數
求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。這是劍指offer...
整數中1出現的次數(劍指offer)
求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數 從1 到 n 中1...