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

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

考点:大数问题。

解决方案:在字符串上模拟数字加法。

《剑指Offer》上的代码太复杂,我自己的代码如下所示:

 void increment(string&str)
 {
    int n = str.size();
     int i = n-1;
     for (; i >=0; --i)
     {
         if (str[i]=='9')
        {
             str[i] = '0';
         }
         else
         {
             str[i] += 1;
             return ;
         }
     }
     if (i==-1)//最高位进位
         str = "1" + str;
 }
void printToMaxOfDigits_1(int n)
 {
     string str = "1";while (str.size()<=n)
     {//注意这里的判断条件,如果用字符串大小进行判断,时间复杂度为O(N),用字符串长度判断,时间复杂度为O(1)
         cout << str << endl;
         increment(str);
     }
 }

 

posted @ 2015-07-01 11:15  Rosanne  阅读(177)  评论(0编辑  收藏  举报