题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1,2,3一直到最大的999.
跳进面试官的陷阱
1 void PrintfToMaxNDigits(int n) 2 { 3 int number=1; 4 int i=0; 5 while(i++<n) 6 number *=10; 7 for(i=1;i<number;i++) 8 printf("%d ",i); 9 }
这样初看起来没有什么问题,但是如果仔细分析这个问题就会发现"当n输入很大时",数据就会发生溢出。
所以可以尝试通过字符串来模拟数字加法的解法,绕过陷阱才能拿到Offer
因此我们只需要做两件事情:
1,在字符串表达的数字上模拟加法;
2,把字符串表达式的数字打印出来;
基于上面的分析,我们可以写出如下代码:
1 void Print1ToMaxNdigits(int n) 2 { 3 if(n<=0) 4 return; 5 char *number=new char[n+1]; 6 memset(number,'0',n); 7 number[n]='