0 400中1出現了多少次?

2022-03-25 05:47:25 字數 917 閱讀 3676

今天小菜無意間在社群看到乙個討論:「0~400中1出現了多少次?」。

小菜看到大部分網友給出的演算法是基於字串的處理,思路大致是:把所有數字拼接成乙個字串,然後對字串進行處理,進而獲取出現次數。例如以下**:

1/**

2* 網友版本

3* 找出"1"出現的次數4*

*/5function

numbercount1(n)

10var s = a.join('');

11return (s.length - s.replace(/1/g, '').length);

12 }

也有高手用位運算處理,無奈太高深,小菜看不懂~~~

其實如果只考慮400這樣規整的整數,是有規律可循的,小菜給出乙個通過計算得出出現次數的版本:

/*

** 小菜的版本

* 找出"1"出現的次數

* 只可以判斷除了最高位,其它位全是0的整數。例如1、10、20、400、5000。**/

function

numbercount(n)

if(_s === 1)

count = count + (_w/10)*_s*_z;

return

count;

}

通過字串處理,當範圍比較小的時候,速度、資源消耗還是可以接受的,但是如果數量級比較大,比如0~400000000,用字串處理,顯然效率太低,經過測試,瀏覽器頁面直接崩潰。

而用小菜給出的演算法,計算0~400000000範圍內1出現的次數,平均耗時15毫秒左右,但小菜這種演算法,只能處理除了最高位,其它位全是0的整數。例如1、10、20、400、5000。

小菜寫這篇文章,不是為了炫耀自己的演算法,而是要感謝社群的積極討論,討論不僅讓我們思路開闊,更讓我們變得善於思考。

數1 n個數中0 9出現過多少次

最初的問題是這樣的 提示 n通過引數傳入 思路出爐的時候可以順便 或者必須 其他幾個數出現的次數一併求了,所以就設計了這樣的程式 include int main printf please input a number scanf d n for i n i 0 i printf d n a 9 ...

題7 出現K次與出現1次

題目描述 乙個陣列中只有乙個數出現了1次,其他的數都出現了k次,請輸出出現了1次的那個數。原理 k個相同的k進製數之間做不進製的加法,結果為0,如,2個2得0 10個5得0 解題思路 將所有的數轉化成為k進製,然後做k進製的不進製加法運算,得出的結果再有k進製轉換位10進製。解題步驟 第一步 建立乙...

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

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