算法题21 打印1到最大的n位数
2016-03-14 16:37
357 查看
题目
分析
通常的思路是,考虑到整数无法表示的情况(如n=100,而没有100位这样的整数),用字符串数组表示要打印的数,然后模拟基本运算逢9进1位。解题主要分两部分:模拟进位,打印数字
代码
输入数字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 }
相关文章推荐
- 算法题22 树的镜像
- 算法题23 带min函数的栈
- 算法题24 二叉树的中序遍历之二叉搜索树转排序双向链表
- 算法题25 二叉树的后序遍历变形之二叉树中和为某一值的路径
- 将博客搬至CSDN
- MySql连接——内连接、外连接(左连接、右连接、全连接)
- 游戏中的 2D 可见性
- lintcode-medium-Best Time to Buy and Sell Stock II
- InitGoogleLogging坑爹
- C# zip压缩
- 数据仓库专题20-案例篇:电商领域数据主题域模型设计v0.1(改进意见征集中)
- HAproxy指南之haproxy配置详解1(理论篇)
- 内核启动错误:use vmalloc=<size> to increase size.
- 309.Best Time to Buy and Sell Stock with Cooldown
- Android设计模式系列(2)--SDK源码之观察者模式
- 浅谈MVP
- [BZOJ 3211] 花神游历各国
- 设计模式总结
- 死锁、活锁、优先级翻转
- RecyclerView下拉刷新和加载更多