一道测试题目

一道测试题目

一道测试题目
据说是google的面试题,大家看有什么方法完成

题目: 一个函数f(n),其中n是一个自然数
返回的结果是从0到这个自然数中1出现的次数
例如 f(4) = 1 . 也就是 0,1,2,3,4中,1出现了1次
f(13) = 6 ,也就是 0,1,2,3,4,5,6,7,8,9,10,11,12,13 中
1出现了6次.(注意 11 是2次哦)

以下是我的代码
===========================
#!usr/bin/perl
while (<STDIN>)
{
chomp;
print get_one($_),"\n";
}

sub get_one
{
my $num = shift();
return 0 if ($num !~ /^\d+$/);
my $longnum;
for(my $i=1;$i<=$num;$i++){$longnum .= $i;}
my @result = $longnum =~ /1/g;
return $#result + 1;
}




   

题目呢[CCB]10[/CCB].
题目呢[CCB]10[/CCB]
我晕,忘记贴题目了
只贴了我的答案
马上改
[quote]--perl -le "$_=.
[quote]
perl -le "$_=join undef,0..shift;print $_=s/1/1/g;" 13
[/quote]
呵呵,用正则会比较方便。又一次证明了 TIMTOWTDI :-p
不过要是 Google 考的是编码习惯之类的,估计这个小鬼把戏会丢分了...
up.