- 浏览: 21902 次
- 性别:
- 来自: 南京
最新评论
乍看这题真够唬人的,群里看到这个题目后争先恐后的说看法。最简单的办法不外乎就是遍历每个数,然后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
发表评论
-
KMP快速字符串查找算法
2011-08-25 19:29 671在C/C++语言编程过程中,一般的字符串搜索操作都是通过标准库 ... -
求解最大公约数问题
2011-08-25 19:27 698最大公因数,又称最大公约数。是指 [n(≧2)个自然数 a1, ... -
堆排序(Heap Sort)算法学习
2011-08-25 19:26 1086在程序设计相关领域, ... -
整数拆分问题的动态规划解法
2011-08-25 19:26 3073输入n,和k,问将n用1到k这k个数字进行拆分,有多少种拆分方 ... -
背包问题介绍与分析
2011-08-25 19:24 1032背包问题是在1978年由Merkel和Hellman提出的。它 ... -
求平方根sqrt()函数的底层算法效率问题
2011-08-25 19:23 1292我们平时经常会有一些数据运算的操作,需要调用sqrt,exp, ... -
面试中常见的一些算法问题
2011-08-25 19:22 699Problem 1 : Is it a loop ? ( ... -
各种排序算法的C++实现与性能比较
2011-08-25 19:21 926排序是计算机算法中非常重要的一项,而排序算法又有不少实现方法, ... -
背包问题之硬币找零问题
2011-08-25 19:19 1176设有6 种不同面值的硬 ... -
求能被1到20的数整除的最小正整数
2011-08-25 19:18 1374求能被1到20的数整除的最小正整数。最直觉的方法是求1到20这 ... -
买书折扣最优惠问题解法
2011-08-25 19:17 756题目:在节假日的时候 ... -
二叉树中的最近公共祖先问题
2011-08-25 19:16 1324题目:要求寻找二叉树中两个节点的最近的公共祖先,并将其返回。 ... -
判断一个整数是否是2的N次方
2011-08-25 19:04 1827题目:给定一个整数num,判断这个整数是否是2的N次方。比如, ... -
字符串逆序的算法汇总
2011-08-25 19:01 1060很早就准备写一个字符串系列的面试题,本来已经写好了,大概有十几 ... -
计算从1到N中1的出现次数
2011-08-25 18:59 601给定一个十进制整数N, ... -
KMP快速字符串查找算法
2011-08-25 18:57 967在C/C++语言编程过程中,一般的字符串搜索操作都是通过标准库 ... -
快速排序的递归实现
2011-08-25 18:54 760快速排序是对冒泡排序的一种改进。它的基本思想是:通过一次排序将 ... -
最大子序列、最长公共子串、最长公共子序列
2011-08-25 18:33 794最大子序列 最大子序列是要找出由数组成的一维数组中和最大的连续 ... -
一道关于男女比例的面试题
2011-08-25 16:56 1042阿里巴巴的一道面试题:说澳大利亚的父母喜欢女孩,如果生出来的第 ...
相关推荐
根据题目给出的信息,1亿以内的质数共有5,761,455个。这一数字不仅展示了质数分布的密集程度,也反映了寻找并验证大范围质数的计算挑战。 #### 三、质数的分布规律 1. **质数分布定理**:随着数值增大,质数变得...
从一亿个数中找出最大的100个 或者n个 用了个堆从一亿个数中找出最大的100个 或者n个 用了个堆
把1亿内的所有质数用.in文件里存放 相邻2个数字用空格隔开.
例如,在解决“数1亿本本子需要多长时间”这一问题时,学生可能需要设计一个模拟实验,估算出一个人在一定时间里能数多少本书,然后根据这个速度来推算数1亿本书所需的时间。这个过程不仅锻炼了学生的问题分析能力,...
3. **数量关系**:十万里面有10个一万,一百万里面有10个十万,一千万里面有10个一百万,一亿里面有10个一千万。 4. **数位顺序表**:亿级包含亿位,万级包含万位,个级包含个位、十位、百位和千位。 5. **数的...
新人教版的《四年级数学上册》第一单元“大数的认识”中的第13课时“1亿有多大”就是一个典型课程。该课程不仅仅是一个数学知识的传授,更是一次深刻体验和实践的过程,让孩子们在探索中理解大数,并将其与日常生活...
在中国,金额的汉字大写有特定的规则,例如1到10的汉字大写分别是壹、贰、叁、肆、伍、陆、柒、捌、玖、拾,而个位与十位、百位、千位、万位等的组合也有固定的表达方式。例如,数字1234567890对应的汉字大写是壹拾...
这导致全球数字报告中的多个指标在过去12个月里出现了惊人的增长。特别是在社交媒体方面,用户数量自2020年以来增长超过13%,在过去一年内增加了近5亿用户,2021年初全球社交媒体用户总数达到42亿。 增长不仅仅体现...
如果"火山安卓数字转金额大写,有单位等"这个压缩包文件提供了代码示例,那么它可能包含了一个自定义的`NumberToChinese`类,这个类里封装了上述的转换逻辑。开发者可以调用类中的方法,如`toChinese(String ...
比如,教师可以先让学生尝试阅读和书写1亿以内的数,然后逐步扩展到1亿以上的数,这样可以让学生在原有的数感基础上自然过渡。在这个过程中,学生的合作交流也是非常关键的,通过讨论和互相帮助,他们能更好地掌握数...
中国的数字经济在过去几年里实现了迅猛的增长,2021年的规模达到了45.5万亿元人民币,占国内生产总值(GDP)的比例高达39.8%。数字产业化、产业数字化以及数字化治理被视为数字经济发展的三个关键组成部分。数字产业化...
2. 一百万里面有10个十万,一亿里面有100个一百万,这展示了数值之间的进率关系。 3. 在数字80528580中,从左往右数,第一个8表示8个千万,第二个8表示8个万,第三个8表示8个十,这体现了每个数位上的数字所代表的值...
根据提供的文件信息,我们可以从这份名为“凯捷-2019数字金融服务报告”的文档中提炼出以下几个关键知识点: ### 一、研究背景与目的 #### 背景概述 金融服务业正处于一场完美的数字风暴中心,面临着来自多方面的...
- Box.net 在2000年成立后的几年内进行了多次大规模融资,总额超过了1亿美元。 - 公司的估值达到了5亿美元。 - 公司计划更换更大的办公场所以适应快速增长的员工队伍。 #### 深入分析: 对于初创企业来说,有效的...
- 十万里面有10个一万,一百万里面有10个十万,一千万里面有10个一百万,一亿里面有10个一千万。 7. 数的读法练习: - 练习题中给出了多个数字,如683596、3598840等,要求先用竖线分级,然后读出这些数字。 8. ...
- “一落千丈、一劳永逸、一马领先”等成语展现了数字在成语中的运用,每个成语都有特定的含义,如“一落千丈”形容地位、情况急剧下降。 8. **数字在对仗中的运用**: - “一乡二里三夫子不识四书五经六艺竟敢教...
在32位系统中,最大整数值可能只有2^32-1(约42亿),而在64位系统中,这个值通常可以达到2^64-1(约9.22E18)。如果数值超过了这些限制,PHP将使用浮点数表示,但浮点数在计算机中是以二进制形式存储的,这会导致...
同时,预计到2012年,通过移动终端上网的用户数量将在现有的2.33亿基础上增加1亿。 2. **数字消费者的细分市场**:报告识别出了七大细分市场,包括“数字达人”、“游戏玩家”、“信息至上型”、“移动行家”、...
32位无符号整数的范围是0 ~ 4 294 967 295,现在有一个正好包含40亿个无符号整数的文件,所以在整个范围中必然有未出现过的数。怎么找到所有未出现过的数? 要求: 可以使用最多1GB的内存。 进阶: 内存限制10MB,...