算法题21 打印1到最大的n位数
题目
输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3 一直到最大的3位数即999
分析
通常的思路是,考虑到整数无法表示的情况(如n=100,而没有100位这样的整数),用字符串数组表示要打印的数,然后模拟基本运算逢9进1位。解题主要分两部分:模拟进位,打印数字
代码
1 bool Increment(char *str,int len) 2 { 3 int current=0; 4 for (int i=len-1;i>=0;i--) 5 { 6 current=str[i]-'0'+1; 7 if (current==10) 8 { 9 if (i==0) 10 { 11 return false;//最高位溢出 12 } 13 14 str[i]='0'; 15 16 }else 17 { 18 str[i]='0'+current;//无进位,未溢出 19 20 return true; 21 } 22 23 } 24 return false; 25 } 26 27 void PrintNumbers(unsigned int size) 28 { 29 if (size==0) 30 { 31 return; 32 } 33 34 char *num=new char[size]; 35 memset(num,'0',size); 36 37 while (Increment(num,size)) 38 { 39 //Increment success. print 40 unsigned int begin=0; 41 for(unsigned int i=0;i<size;i++) 42 { 43 if (i>begin) 44 { 45 cout<<num[i]; 46 }else 47 { 48 if (num[i]=='0')//寻找第一个不为'0'的高位 49 { 50 begin++; 51 }else 52 { 53 cout<<num[begin]; 54 } 55 56 } 57 } 58 cout<<endl; 59 } 60 61 }