# re: Google面试题之补充 回复 更多评论
2006-09-17 12:57 by
sorry,我有个笔误
(count_i-i)/9
=>
(count_i-i)/8
至多含有9个1,count每次最多减9,而i-=1,所以差距至多-8,
这样会更快一点
# re: Google面试题之补充 回复 更多评论
2006-09-17 13:19 by
说实话,第一次我和你说的算法是指的
fastrun()
不过后来你叫我把算法给你看看,我觉得这种奇技淫巧不好意思拿出手
只好想了一个算法
不过,我还是觉得fastrun比run更有价值,我想这也是Google面试的本意吧:)
# re: Google面试题之补充 回复 更多评论
2006-09-17 13:25 by
后来我也觉得那个不正经。
我认为还是正经解决一下比较好。做到这个份上,也差不多了。
# re: Google面试题之补充 回复 更多评论
2007-08-16 14:17 by
Show一下我的程序:
int count_ones(int n)
{
static int pow10[]={1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
int ones=0;
for(int m=n, b=0; m; m/=10, b++)
{
int d=m%10;
ones+=d*pow10[b]*b/10;
if(d>1) ones+=pow10[b];
if(d==1) ones+=n%pow10[b];
}
return ones;
}