输出1到最大的n位数
来源:互联网 发布:做动画片用什么软件 编辑:程序博客网 时间:2024/06/07 17:42
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。
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[n] = '\0'; //最后一个位置为‘\0’ //计算一个就输出一个 while (!add(num)) { PrintNum(num); } delete[] num;}int main(){ int n = 4; Print(n); getchar(); return 0;}
0 0
- 输出1到最大的N位数
- 输出1到最大的N位数
- 输出1到最大的N位数
- 输出1到最大的N位数
- 输出1到最大的N位数
- 输出1到最大的N位数
- 输出1到最大的N位数
- 输出1到最大的N位数
- 输出1到最大的N位数
- 输出1到最大的N位数
- 输出1到最大的N位数
- 输出1到最大的N位数
- 输出1到最大的N位数
- 输出 1 到最大的 N 位数
- 输出1到最大的n位数
- 输出1到最大的n位数
- 输出1到最大的N位数
- 输出0到最大的n位数
- Android中的事件分发机制(下)——View的事件处理
- 方老师与素数
- C程序问题归纳(static,auto,register,extern,程序内存分布图,linux下程序的执行过程......)(一)
- 函数接口
- 诗歌一
- 输出1到最大的n位数
- Lucene.Net+盘古分词 实现搜索 Quartz.Net(定时任务) 实现热词统计
- 引用与指针
- Shell中使用grep、sed正则提取字符串
- iOS开发系列--视图切换
- 走进Android天才少年-1999年的Lody(罗迪)
- HDU--1013Digital Roots
- 储存应用首选项
- static关键字