数字1亿里面有多少个1呢
生活随笔
收集整理的這篇文章主要介紹了
数字1亿里面有多少个1呢
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
乍看這題真夠唬人的,群里看到這個題目后爭先恐后的說看法。最簡單的辦法不外乎就是遍歷每個數,然后toString() 看看里面有多少個1,最后全部加起來,這是我們得到標準答案的辦法。
群里3個人寫了3個笨方法都跑出來了,3個笨方法,呵呵 有意思,笨方法也不一樣。 程序的實現真是變幻莫測。
view sourceprint?01 var re = /1{1}/g;
02
03 var max = 1 * 10000 * 10000;
04
05 getTotal(f);
06 getTotal(f1);
07 getTotal(f2);
08
09 function getTotal(func)
10 {
11 var total = 0;
12 var begin = new Date();
13 for(var i= 1 ;i <= max;i++)
14 {
15 total += func(i);
16 }
17 var end = new Date();
18 var timespan = end - begin;
19 alert("開始時間:"+begin + "\n 結束時間:"+end +"\n總耗時:"+timespan + "毫秒 \n 總數:"+total);
20 }
21
22 function f(num)
23 {
24 var t = 0;
25 while(num)
26 {
27 if(num < 10){ if(num==1)t++;break;}
28 var i = num % 10;
29 if(i == 1) t++;
30 num = parseInt(num / 10);
31 }
32 return t;
33 }
34
35 function f1(num)
36 {
37 var str = num.toString()
38 var t = 0;
39 for(var i=0;i<str.length;i++)
40 {
41 if(str.charAt(i)=="1") t++;
42 }
43 return t;
44 }
45
46 function f2(num)
47 {
48 var str = num.toString();
49 var t = 0;
50 while(re.exec(str))
51 {
52 t++;
53 }
54 return t;
55 }
當數量少的時候第一種最快,顯然嘛,沒有處理字符串的步驟。按理說數量越大他越有優勢。 可是實測結果,3個都差不多。但是用C#跑的話,第一個明顯越來越有優勢。。。。
但是出題人肯定不是這樣想的,很多人都在說自己的技巧與看法,我也思考了很久。
先拿 100來說 ,100里面有多少個1?
view sourceprint?01 10
02 11
03 12
04 13
05 14
06 15
07 16
08 17
09 18
10 19
11 01
12 11
13 21
14 31
15 41
16 51
17 61
18 71
19 81
20 91
故意這么排列是我們可以把 0~99看作是 1個長度為2的數組, 1位為1時,2位的可能性是10,2位為1時1位的可能性為10,所以 0~99應該有20個1,而100有1個所以是21個。
999就應該是 1*10*10 + 10*1*10 + 10*10*1 = 300
400呢? 因為首位只能出現0~3 ,所以應該是 1*10*10 + 4*1*10 + 4*1*10
4 0000 0000 應該是 1 * (10^8) + 4*(10^7) * 8 = 420000000
群里3個人寫了3個笨方法都跑出來了,3個笨方法,呵呵 有意思,笨方法也不一樣。 程序的實現真是變幻莫測。
view sourceprint?01 var re = /1{1}/g;
02
03 var max = 1 * 10000 * 10000;
04
05 getTotal(f);
06 getTotal(f1);
07 getTotal(f2);
08
09 function getTotal(func)
10 {
11 var total = 0;
12 var begin = new Date();
13 for(var i= 1 ;i <= max;i++)
14 {
15 total += func(i);
16 }
17 var end = new Date();
18 var timespan = end - begin;
19 alert("開始時間:"+begin + "\n 結束時間:"+end +"\n總耗時:"+timespan + "毫秒 \n 總數:"+total);
20 }
21
22 function f(num)
23 {
24 var t = 0;
25 while(num)
26 {
27 if(num < 10){ if(num==1)t++;break;}
28 var i = num % 10;
29 if(i == 1) t++;
30 num = parseInt(num / 10);
31 }
32 return t;
33 }
34
35 function f1(num)
36 {
37 var str = num.toString()
38 var t = 0;
39 for(var i=0;i<str.length;i++)
40 {
41 if(str.charAt(i)=="1") t++;
42 }
43 return t;
44 }
45
46 function f2(num)
47 {
48 var str = num.toString();
49 var t = 0;
50 while(re.exec(str))
51 {
52 t++;
53 }
54 return t;
55 }
當數量少的時候第一種最快,顯然嘛,沒有處理字符串的步驟。按理說數量越大他越有優勢。 可是實測結果,3個都差不多。但是用C#跑的話,第一個明顯越來越有優勢。。。。
但是出題人肯定不是這樣想的,很多人都在說自己的技巧與看法,我也思考了很久。
先拿 100來說 ,100里面有多少個1?
view sourceprint?01 10
02 11
03 12
04 13
05 14
06 15
07 16
08 17
09 18
10 19
11 01
12 11
13 21
14 31
15 41
16 51
17 61
18 71
19 81
20 91
故意這么排列是我們可以把 0~99看作是 1個長度為2的數組, 1位為1時,2位的可能性是10,2位為1時1位的可能性為10,所以 0~99應該有20個1,而100有1個所以是21個。
999就應該是 1*10*10 + 10*1*10 + 10*10*1 = 300
400呢? 因為首位只能出現0~3 ,所以應該是 1*10*10 + 4*1*10 + 4*1*10
4 0000 0000 應該是 1 * (10^8) + 4*(10^7) * 8 = 420000000
總結
以上是生活随笔為你收集整理的数字1亿里面有多少个1呢的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ABC200 C - Ringo‘s F
- 下一篇: PHP初学者如何搭建环境,并在本地服务器