Google考试题:定义控制台应用程序的入口点《节选自froster.>

 1 //  MyCountOne.cpp : 定义控制台应用程序的入口点。
 2 //
 3
 4 #include  " stdafx.h "
 5 #include  < iostream >
 6 #include  < string >
 7 #include  < math.h >
 8 #include  < windows.h >
 9 #include  < ctime >
10
11 using   namespace  std;
12 unsigned  long  count  =   0 ;
13 unsigned  long  F( int  buf[],  int  start );
14 unsigned  long  T[ 20 ];
15
16 void  CaculateT( void )
17 {
18    int i;
19    T[1= 1;
20
21    for(i=2;i<10;i++)
22    {
23        T[i] = pow(10,(i-1)) + 10 * T[i-1];
24    }

25}

26
27 int  _tmain( int  argc, _TCHAR *  argv[])
28 {
29    unsigned long temp, M = 199900;
30    int i;
31    int buf[20];
32    DWORD start, end, usetime;
33    start = GetTickCount();
34    
35    CaculateT();
36
37    do
38    {
39        i=1;
40        temp = M;
41        while( temp > 0 )
42        {
43            buf[i++= temp % 10;
44            temp /= 10;
45        }

46
47        cout<<M<<"->"<<F(buf, i-1)<<"  ";
48        if(M%5==0
49            cout<<endl;
50    }
while(M++<199981);
51
52    end = GetTickCount();
53    usetime = start - end;
54    cout<<"use "<<usetime<<"milliseconds"<<endl;
55
56    cout<<M-1;
57
58
59    return 0;
60
61
62}

63
64 unsigned  long  F( int  buf[],  int  start)
65 {
66
67    unsigned long temp = 0;
68    if(start==1)
69    {
70        if(buf[start] == 0)
71            return 0;
72        else
73            return 1;
74    }

75
76    if( buf[start] == 1)
77    {
78        temp = 0;
79        for(int i=start-1; i>0; i--)
80            temp = temp * 10 + buf[i];
81
82        return ( T[start-1+ temp + 1 + F(buf, start - 1) );
83    }

84    else if(buf[start] == 0)
85    {
86        return F(buf, start - 1);
87    }

88    else
89    {
90        return ( buf[start] * T[start-1+ pow(10, start - 1+ F(buf, start - 1) );
91    }

92
93}

你可能感兴趣的:(Google)