google的一道JAVA面试题!!!

java代码:
  1. Considerafunctionwhich,foragivenwholenumbern,returnsthenumberofonesrequiredwhenwritingoutallnumbersbetween0andn.
  2. Forexample,f(13)=6.Noticethatf(1)=1.Whatisthenextlargestnsuchthatf(n)=n?


翻译过来大体是这样:
有一个整数n,写一个函数f(n),返回0到n之间出现的"1"的个数。比如f(13)=6,现在f(1)=1,问下一个最大的f(n)=n的n是什么?

答案一:

  1. intgetCountOfNumber(intnumber){
  2. intcount=0;
  3. intlength=(""+number).length();
  4. for(inti=0;i<=length;i++){
  5. intnum=number%10;
  6. number=(number-num)/10;
  7. if(num*num==1)count++;
  8. }
  9. returncount;
  10. }


计算到:199981用了203
不过只计算到上边的数值就没多大意思,看看这个:
这个是4000000000以内的结果!:
f(0)=0
f(1)=1
f(199981)=199981
f(199982)=199982
f(199983)=199983
f(199984)=199984
f(199985)=199985
f(199986)=199986
f(199987)=199987
f(199988)=199988
f(199989)=199989
f(199990)=199990
f(200000)=200000
f(200001)=200001
f(1599981)=1599981
f(1599982)=1599982
f(1599983)=1599983
f(1599984)=1599984
f(1599985)=1599985
f(1599986)=1599986
f(1599987)=1599987
f(1599988)=1599988
f(1599989)=1599989
f(1599990)=1599990
f(2600000)=2600000
f(2600001)=2600001
f(13199998)=13199998
f(35000000)=35000000
f(35000001)=35000001
f(35199981)=35199981
f(35199982)=35199982
f(35199983)=35199983
f(35199984)=35199984
f(35199985)=35199985
f(35199986)=35199986
f(35199987)=35199987
f(35199988)=35199988
f(35199989)=35199989
f(35199990)=35199990
f(35200000)=35200000
f(35200001)=35200001
f(117463825)=117463825
f(500000000)=500000000
f(500000001)=500000001
f(500199981)=500199981
f(500199982)=500199982
f(500199983)=500199983
f(500199984)=500199984
f(500199985)=500199985
f(500199986)=500199986
f(500199987)=500199987
f(500199988)=500199988
f(500199989)=500199989
f(500199990)=500199990
f(500200000)=500200000
f(500200001)=500200001
f(501599981)=501599981
f(501599982)=501599982
f(501599983)=501599983
f(501599984)=501599984
f(501599985)=501599985
f(501599986)=501599986
f(501599987)=501599987
f(501599988)=501599988
f(501599989)=501599989
f(501599990)=501599990
f(502600000)=502600000
f(502600001)=502600001
f(513199998)=513199998
f(535000000)=535000000
f(535000001)=535000001
f(535199981)=535199981
f(535199982)=535199982
f(535199983)=535199983
f(535199984)=535199984
f(535199985)=535199985
f(535199986)=535199986
f(535199987)=535199987
f(535199988)=535199988
f(535199989)=535199989
f(535199990)=535199990
f(535200000)=535200000
f(535200001)=535200001
f(1111111110)=1111111110

有人用c写了一个,得出这些结果只用了几十毫秒!
有更好思路的MAIL IT TO ME。 thanks~:) safecn@gmail.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值