google的一道面试题!(附我的解法)

  Consider a function which, for a given whole number n, returns the number of ones required when writing out all numbers between 0 and n.

  For example, f(13)=6. Notice that f(1)=1. What is the next largest n such that f(n)=n?

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

我是用C写的,原题要求用java,其实无所谓了,欢迎大家指点:

#include <cstdio>
#include <iostream>

using namespace std;

int F(int num)
{
 int total = 0;
 int one = 1;
 int k = 0;
 for(;num/one!=0; one=one*10, k++);

  int A = 0;
 int B = 0;
 int C = 0;
 int D = 0;
 int E = 0;

 int two = one/10;

 for(; k>0; k--)
 {
     A = num/one;
    B = num%two;
    C = num/two;

    E = C - D*10;
    D = C;

     if (E > 1)
    {
     total += A*two + two;
    }
    else if (E == 1)
    {
     total += A*two + B + 1;
    }
    else if (E == 0)
    {
     total += A*two;
    }

   one = one/10;
    two = two/10;
 }

 return total;

}

int main()
{
   int num;
   while(true)
   {
 
   cout << "Enter: ";
   cin >> num;

   cout << "The total is :" << F(num) << endl ;

  } 

   return 0;
}

 

 

阅读更多
个人分类: C/C++
想对作者说点什么? 我来说一句

一道 Google 竞赛题的解法

2008年01月23日 66KB 下载

没有更多推荐了,返回首页

不良信息举报

google的一道面试题!(附我的解法)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭