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

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

考点:大数问题。

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

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

 1 void increment(string&str)

 2 {

 3     int n = str.size();

 4     int i = n-1;

 5     for (; i >=0; --i)

 6     {

 7         if (str[i]=='9')

 8         {

 9             str[i] = '0';

10         }

11         else

12         {

13             str[i] += 1;

14             return ;

15         }

16     }

17     if (i==-1)//最高位进位

18         str = "1" + str;

19 }

20 void printToMaxOfDigits_1(int n)

21 {

22     string str = "1";

23     string endString(n,'9');

24     while (str.size()<=n)

25     {//注意这里的判断条件,如果用字符串大小进行判断,时间复杂度为O(N),用字符串长度判断,时间复杂度为O(1)

26         cout << str << endl;

27         increment(str);

28     }

29     cout << endString << endl;

30 }

 

你可能感兴趣的:(面试题)