算法题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  }

 

posted @ 2016-02-17 15:35  summerxx  阅读(167)  评论(0编辑  收藏  举报