面试题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); } }