您的位置:首页 > 其它

算法题21 打印1到最大的n位数

2016-03-14 16:37 357 查看
题目
  
输入数字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  }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: