从低位开始:
耗时:4031 CLOCKS_PER_SEC (未输出)

#include <vector>
#include 
<algorithm>
#include 
<iostream>
#include
<ctime> 
using namespace std;

void GenerateCandidate(
int n, vector<int>& Candidate, vector<int>& Filter)
{
    
int base = 1;
    
for (int i=1; i<n; ++i)
    {
        base 
*= 10;
    }
    
int baseUp = base*10;

    
int remainder = base % n;
    
if (remainder != 0)
    {
        
int quotient = base / n;
        base 
= (quotient+1)*n;
    }

    
int number = base;
    
do 
    { 
        
int numberTest = number/10;
        
if(binary_search(Filter.begin(), Filter.end(), numberTest))
        {
            Candidate.push_back(number);
        }

        number 
+= n;
    } 
while(number < baseUp);
}

void InitFilter(vector
<int>& Filter)
{
    
for (int i=1; i<10++i)
    {
        
Filter.push_back(i);
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    vector
<int> candidate;
    vector
<int> filter;
    InitFilter(
filter);
    
//candidate.reserve(100000000);
    
//filter.reserve(100000000);
    
for (int i=2; i<9++i)
    {
        GenerateCandidate(i, candidate, 
filter);
        
//copy(candidate.begin(), candidate.end(), ostream_iterator<int>(cout, "\n"));
        
filter.clear();
        candidate.swap(
filter);
    }
    candidate.swap(
filter);
    
//copy(candidate.begin(), candidate.end(), ostream_iterator<int>(cout, " "));
    cout
<<endl <<"count:" <<candidate.size();
    cout
<<endl <<"time:"<<clock(); 
    char c;
    cin
>>c;
    return 
0;
}


从高位开始:
耗时:0秒(未输出)
#include <iostream>
#include
<ctime> 
using namespace std;

int count =0;
void FindNumber(
int base, int power, int end)
{
    
int bounce = base+9;
    
int remainder = base%power;
    
if (0 != remainder)
    {
        remainder 
= power - remainder;
    }

    base 
+= remainder;
    
do 
    {
        
if (power == end)
        {
            
//cout << base <<" ";
            count
++;
        }
        
else if(base != 0)
        {
            FindNumber(base
*10, power+1end);
        }
        base 
+= power;
    } 
while(base<=bounce);
}

void FindNumber(
int end)
{
    FindNumber(
01end);
}

int _tmain(int argc, _TCHAR* argv[])
{
    FindNumber(
9);

    cout
<<endl<<count;
cout
<<endl <<"time:"<<clock(); 
    char c;
    cin
>>c;
    return 
0;
}