《剑指offer》——打印1到最大的n位数
2015-12-22 20:16
435 查看
考虑大数问题,使用字符数组存储,
#include<iostream> using namespace std; bool inc(char *num) { //累加结束标志,初始为false //只有当下标为0的位置上产生进位时,才能表明打印结束 bool flag = false; int len = strlen(num); int c = 0;//进位标志 for(int i = len - 1; i >= 0; i--) { num[i] = num[i] + c; if(i == len - 1)//每次自加都在第len-1位上进行 ++num[i]; if(num[i] > '9')//如果大于9,则进位 { if(i == 0)//如果在第0位置上产生进位,设置flag为true flag = true; else//否则将当前位置上的值减10,并将进位标志置1 { num[i] -= 10; c = 1; } } else { break;//如果不大于10,则结束循环,直接打印 } } return flag; } void show(char *num) { while(*num == '0')//跳过之前为0的字符,如跳过098前面的0 num++; while(*num != '\0')//输出当前的字符 { cout << *num; num++; } } void print(int n) { if(n <= 0)//错误的输入 cout << "error" << endl; char *num = new char[n + 1];//新建一个长度为n+1的字符数组 memset(num, '0', n);//将数组初始化 num = '\0';//设置结束位 while(!inc(num)) show(num);//循环打印每个数 } int main() { print(3);//输出1~999 return 0; }
相关文章推荐
- 《剑指offer》——数值的整数次方
- preferredStatusBarStyle 不执行
- Jquery选择器
- 计步器的preference.xml和project properties学习
- 我的第一个Node.js项目
- Effective minidump
- Javascript之预编译
- 分享:JavaScript常见面试题
- JSON
- Java之StringBuffer
- Javascript History对象
- phantomjs学习资料
- HTML&CSS----练习做网页
- WebSocket的JavaScript例子
- Bootstrap输入建议库 autosuggest.js
- scala-46: ClassTag 、Manifest、ClassManifest、TypeTag代码实战及其在Spark中的应用源码解析
- Test checkout of feature 'Compiler' failed.
- Total Difference String
- JSP/Servlet-----charset 、pageEncoding差别
- XML与HTML的比较