【面试题12】打印1到最大的n位数

来源:互联网 发布:fps游戏鼠标推荐 知乎 编辑:程序博客网 时间:2024/06/04 18:18

题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1,2,3一直到最大的3位数即999.

题目陷阱:大数问题

在字符串上模拟数字加法的解法:

void Print1ToMaxOfNdigits(int n){    if(n<=0)        return ;    char *number=new char[n+1];    memset(number,'0',n);    number[n]='\0';    while(!Incrememt(number))    {        printNumber(number);    }    delete []number;}

如何在每一次增加1之后快速判断是不是到了最大的n位数是本题的一个小陷阱。

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)                isOverflow=true;            else            {                nSum-=10;                nTakeOver=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)        {            printf("%c",number[i]);        }    }    printf("\t");}
0 0