乍看这题真够唬人的,群里看到这个题目后争先恐后的说看法。最简单的办法不外乎就是遍历每个数,然后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

数字1亿里面有多少个1呢相关推荐

  1. php 计算1到1亿的和,php把数字1-1亿换成汉字表述,例如150转成一百五十,1-1150_PHP教程...

    php 把数字1-1亿换成汉字表述,例如 150 转成 一百五十,1-1150 直接上实例 写到 千亿上了. /** * @author ja颂 * 把数字1-1亿换成汉字表述,如:123->一 ...

  2. Java快速生成20亿数字_20 亿个数字在 4G 内存中如何去重排序:快来试一试 BitMap...

    有一道流传广泛的面试题: 给你一台 4G 内存的机器,一组 20 亿个无序正整数,如何快速地判断一个正整数 N 是否在这组数字中?或者如何快速地对这组数据排重后排序? 让我们先算算 20 亿个整数会占 ...

  3. 京东物流闯关IPO:重资产扩张盈利难,对手林立不易突围,百亿估值有多少水分?

    作者 | 黄老邪 来源 | 镭射财经 随着经济发展水平的不断提升,我国已连续多年成为全球最大的网络零售市场.网络购物渗透率不断提升,让人们收发快递的需求越来越大,带动着快递行业的蓬勃发展." ...

  4. 网上交易漏税近10亿 商务部要指导意见

    http://news.csdn.net/n/20060717/92668.html 网上交易"漏税"近10亿 商务部要指导意见   2006.07.17  来自:中国经济周刊   ...

  5. 打磨5年,央行数字货币究竟是什么模样?你想知道的都在这

    "中国央行数字货币设计了双层的运营投放体系而不是由人民银行直接对公众发行数字货币的单层运营体系." 本文来源:零壹财经:作者:照生 雨林:该内容旨在传递更多市场信息,不构成任何投资 ...

  6. 阿里的纳税额109亿是怎么算的?

    最近,媒体热炒阿里巴巴 2014 年纳税超过百亿,浙江省长李强也称赞阿里巴巴"2014 年全年纳税 109 亿,平均每天纳税 3000 多万,是中国唯一一个纳税额超百亿的互联网公司,贡献巨大 ...

  7. java计算加班费的程序代码_17.编程题:计算加班费、卖东西、日期提取、线程、数字、网络、数据库...

    计算加班费 加班10小时以下加班费是时薪的1.5倍.加班10小时或以上,按4元/时算.提示:(一个月工作26天,一天正常工作8小时) 计算1000月薪,加班9小时的加班费 计算2500月薪,加班11小 ...

  8. 比起商汤IPO,我们更关心那1亿美金和C轮融资的背后大料

    昨日(11月23日),营长的朋友圈被<商汤科技计划IPO 并将在美设立研发中心>刷屏了.甚至有媒体曝"商汤科技最早明年进行IPO". 这条新闻最早由路透社爆出来.对此, ...

  9. 《数字质量手册》新书问答

    \ 要点 \\ 放眼世界,成熟的数字时代已经来临,这就要求传统的敏捷模式做出改变,DevOps实践工作也要能跟上脚步并且需要向数字转型的的下一个阶段演进,转型的方向包括采用聊天机器人.AI或者其他诸如 ...

最新文章

  1. MySQL半同步安装以及参数
  2. 织梦动态PHP可以删除吗,DeDe织梦cms如何全站动态化,取消静态功能
  3. c语言自增自减5运算符详解,巧用C语言中的自增自减运算符
  4. c语言loop until用法,流程控制中的while、until、for循环
  5. Mac 下利用 FileMerge 进行代码比较、合并
  6. 张小龙讲座_微信背后的产品观(20120724)
  7. y470 bios uefi_AMD又能开核?刷完BIOS后性能白给,这次血赚了
  8. 概率论在实际生活的例子_概率论在实际生活中的应用
  9. 云杰恒指:9.3恒指期货早盘资讯
  10. allure-report详细使用教程
  11. UltraEdit编辑器无法使用快捷键全选ctrl+a功能失效解决办法
  12. 【JTAG、SBW、BSL】MSP430的BSL
  13. Spring Cloud Loadbalancer
  14. LinkedBlockingQueue 实现生产者消费者模型
  15. 腾讯企业 html邮件模板,腾讯企业邮箱DMARC设置指南(TXT记录)
  16. ACME_Pan-specific_peptide-MHC_class_I_binding_pred
  17. c++基础-继承与派生,定义基类person和公有派生类student
  18. 如何将手机改造成振动器---Vibrator
  19. 软件工程基础 ppt要点 哈工程
  20. 将VBA操作封装为DLL组件并在EXCEL中调用

热门文章

  1. 置信椭圆半径,卡方分布,多元正态分布
  2. 智能汽车赛道,风向变了
  3. 任务系统 java_当前主流网络游戏任务系统形式研究(转)
  4. 软件测试(3)测试分类、原则
  5. Ubuntu20.04 设置ens33网卡
  6. 量化交易初级阶段——简单多因子策略实现指数增强
  7. WIN7管理员账号删除后无法获取管理员权限解决
  8. UNIX哲理名言(中英文对照)
  9. C/C++中花括号 {} 的作用
  10. 清晰讲解激光雷达与相机标定的时间戳同步问题