#include <iostream>
#include <stack>
#include <queue>
#include <algorithm>
#include <string.h>
#include <cstdio>
#include <stdlib.h>
using namespace std;
void printToMaxNdigits( int n )
{
if( n < 1 )
{
cout << "printToMaxNdigits func: err -1, n < 1 " << endl;
return;
}
char *p = new char[ n + 2 ];
if( NULL == p )
{
cout << "printToMaxNdigits func: err -1, NULL == p " << endl;
return;
}
memset( p, '\0', n + 2 );
strcpy( p, "1" );
int curLen = strlen(p);
while( curLen <= n )
{
cout << p << endl;
int up = 0;
int len = strlen(p);
char tmp = '0';
for( int i = len - 1; i >= 0; i-- )
{
if( i == len - 1 )
{
tmp = p[i] + 1;
}
else
{
tmp = p[i] + up;
}
if( tmp > '9' )
{
up = 1;
p[i] = '0';
}
else
{
up = 0;
p[i] = tmp;
}
}
if( 1 == up )
{
for( int j = len - 1; j >= 0; j-- )
{
p[ j + 1 ] = p[j];
}
p[0] = '1';
}
curLen = strlen(p);
}
delete []p;
p = NULL;
return;
}
// 递归解决
void printNumber( char *p )
{
int len = strlen(p);
bool begin = false;
for( int i = 0; i < len; i++ )
{
if( !begin && p[i] != '0' )
{
begin = true;
}
if( begin )
{
cout << p[i];
}
}
if( begin )
{
cout << endl;
}
return;
}
void print1ToMaxOfNDigitsRecursively( char *p, int n, int index )
{
if( index == n - 1 )
{
printNumber(p);
return;
}
for( int i = 0; i < 10; i++ )
{
p[ index + 1 ] = '0' + i;
print1ToMaxOfNDigitsRecursively( p, n, index + 1 );
}
return;
}
void printToNDigits( int n )
{
if( n < 1 )
{
cout << "printToNDigits func: err -1, n < 1 " << endl;
return;
}
char *p = new char[ n + 2 ];
if( NULL == p )
{
cout << "printToNDigits func: err -1, NULL == p " << endl;
return;
}
memset( p, '0', n + 2 );
p[n] = '\0';
for( int i = 0; i < 10; i++ )
{
p[0] = '0' + i;
print1ToMaxOfNDigitsRecursively( p, n, 0 );
}
return;
}
// n表示几层循环,cur表示当前处于第几层,result表示当前结果
void myrecursion( int n, int cur, int result )
{
if( cur == n )
{
cout << result << endl;
return;
}
for( int i = 1; i <= 10; i++ )
{
myrecursion( n, cur + 1, result + i );
}
return;
}
int main()
{
int ret = 0;
myrecursion( 2, 0, 0 );
// printToMaxNdigits(8);
//printToNDigits(5);
return ret;
}