精华帖 (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) } |
|
返回顶楼 | |
发表时间:2012-05-28
百度最喜欢玩算法
|
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |