论坛首页 招聘求职论坛

百度java开发面试题(2011-12-XX)

浏览 29565 次
精华帖 (3) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-05-28  
yueyemaitian 写道
coollzh 写道
 
算法:
4、1到1亿的自然数,求所有数的拆分后的数字之和,如286 拆分成2、8、6,如1到11拆分后的数字之和 => 1 + ... + 9 + 1 + 0 + 1 + 1。

有个简捷的解法:

var a=1+2+..+9;
var max = 100,000,000;
var result = 0;
while(max>1)
{
  max = max / 10;
  result += a * max;
}
return result;


不好意思,忘了说明,这个是要当场算出答案的

long counter=0;
for(int i=1;i<Integer.MAX_INTEGER_VALUE;i++)
{
	do{
		counter+=i%10;
		i=i/10;
	}while(i!=0)
}
0 请登录后投票
   发表时间:2012-05-28  
百度最喜欢玩算法
0 请登录后投票
   发表时间:2012-05-29  
考虑 00000000到99999999
共一亿个数,每个数共8位,共8亿位。
其中数字0到9出现的次数相等,都是 8亿/10 = 8千万次。
因此各个位上的的数字和 = (0+1+2+……+9)×8000 0000

因此1到 1 0000 0000,就在上述基础上再加“一亿”这个数本身的数字和
总和 = (0+1+2+……+9)×8000 0000 + 1 = 36 0000 0001
即36亿零1
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics