输出1到最大的n位数
2016-05-15 19:24
253 查看
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。
eg:输入3,输出1 2 3 一直到999。
**思路:**n有可能是一个很大的数,要考虑到大数问题。用数组或字符串表达大数。用字符串表示数字的时候,最直观的方法就是字符串里每一个字符都是‘0’到‘9’之间的某一个字符,用来表示数字中的一位。因为数字最大是n位,因此需要一个n+1位的字符串。当实际长度不够n位时,在前面补0。
eg:输入3,输出1 2 3 一直到999。
**思路:**n有可能是一个很大的数,要考虑到大数问题。用数组或字符串表达大数。用字符串表示数字的时候,最直观的方法就是字符串里每一个字符都是‘0’到‘9’之间的某一个字符,用来表示数字中的一位。因为数字最大是n位,因此需要一个n+1位的字符串。当实际长度不够n位时,在前面补0。
#include<iostream> #include<string.h> using namespace std; bool add(char *num) { if (num == NULL) return false; bool OverFlow = false; //判断是否到最大的n位数 int nTakeOver = 0;//表示进位 int len = strlen(num); for (int i = len - 1; i >= 0; i--) { int sum = num[i] - '0' + nTakeOver; if (i == len - 1) { sum++; } if (sum >= 10) { if (i == 0) OverFlow = true; else { sum -= 10; nTakeOver = 1; num[i] = '0' + sum; } } else { num[i] = '0' + sum; break; } } return OverFlow; } void PrintNum(char *num) { bool IsFirst0 = true; //表示是否为第一个0 int len = strlen(num); for (int i = 0; i < len; i++) { if (IsFirst0 && num[i] != '0') IsFirst0 = false; if (!IsFirst0) cout << num[i]; } cout << " "; } void Print(int n) { if (n <= 0) return ; char *num = new char[n + 1]; memset(num, '0', n); //数组初始化为0 num = '\0'; //最后一个位置为‘\0’ //计算一个就输出一个 while (!add(num)) { PrintNum(num); } delete[] num; } int main() { int n = 4; Print(n); getchar(); return 0; }
相关文章推荐
- 函数接口
- Android中的事件分发机制(下)——View的事件处理
- 方老师与素数
- 扑面而来的碎片--图片3D炸裂效果初体验
- Netty+Zookeeper实现一个类似Dubbo的RPC框架
- STL之set和multiset详解
- 为什么要对MySQL做主从同步复制
- 如何用shell实现基本的线程池
- 第八周项目三-指向学生类的指针
- Hadoop的管理目录
- 陶哲轩实分析-第7章 级数
- TextView的setOnClickListener
- spark 1.3.1以上的集群搭建流程
- z-index学习知识小结
- 20160512--hibernate--缓存
- uva Ugly Numbers
- chrono
- 通过修改flipwalls线路实现移动和联通全免流
- Linux(CentOS6.5)下Nginx注册系统服务(启动、停止、重启、重载等)&设置开机自启
- 高精度减法——一步一步算法篇