// 面试题12_打印1到最大的n位数.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

bool Increment(char *number)
{
    bool isOverflow=false;
    int nTakeOver=0;
    int nLength=strlen(number);

    for(int i=nLength-1;i>=0;--i)
    {
        int nSum=number[i]-'0'+nTakeOver;
        if(i==nLength-1)
            nSum++;

        if(nSum>=10)
        {
            if(i==0)//若是首位满10,则到了最大的n位
                isOverflow=true;
            else
            {
                nSum-=10;
                nTakeOver=1;//若满10则上一位加1
                number[i]='0'+nSum;
            }
        }
        else
        {
            number[i]='0'+nSum;
            break;
        }
    }
    return isOverflow;
}

void PrintNumber(char *number)
{
    bool isBeginning0=true;
    int nLength=strlen(number);
    for(int i=0;i<nLength;++i)
    {
        if(isBeginning0&&number[i]!='0')
        {
            isBeginning0=false;
        }
        if(!isBeginning0)
        {
            cout<<number[i];
        }
    }
    cout<<"\t";
}


void Print1ToMaxOfNDigits(int n)
{
    if(n<=0)
        return;

    char *number=new char[n+1];
    memset(number,'0',n);
    number[n]='\0';

    while(!Increment(number))
    {
        PrintNumber(number);
    }
    delete []number;
}


int _tmain(int argc, _TCHAR* argv[])
{
    Print1ToMaxOfNDigits(3);
    return 0;
}

字符串是一个简单、有效的表示大数的方法。