输入数字n,按顺序输出从1最大的n位10进制数
2013-03-17 22:36
465 查看
当我们求最大的n位数的时候,是不是有可能用整型甚至长整型都会溢出?分析到这里,我们很自然的就想到我们需要表达一个大数,最常用的也是最容易实现的表达大数的方法是用字符串或者整型数组(当然不一定是最有效的)。 采用类似―n位k进制枚举‖的算法(也类似于《编程之美》―电话号码对应英文单词‖),代码如下:
#include <iostream> using namespace std; const unsigned MaxBit = 10; static unsigned outArr[MaxBit]; const char *HighBit = "123456789"; const unsigned HighNum = 10; const char *OtherBit = "0123456789"; const unsigned OtherNum = 11; void PrintAllNumberWithNBits(unsigned int N) { //输出位数为N位的数,即:10^(N-1)...10^N-1 if (N < 1) return; for (unsigned i = MaxBit-N; i < MaxBit; i++) if (i == MaxBit-1) outArr[i] = 0; else outArr[i] = 1; while (1) { int k = N; outArr[MaxBit-1]++; if(k==1 && outArr[MaxBit-1]>=HighNum) return; //前一个数字所有位均为9,循环结束 else if (outArr[MaxBit-1-N+k] >= OtherNum) { int j = k; while (j>1 && outArr[MaxBit-1-N+j]>=OtherNum) { outArr[MaxBit-1-N+j] = 1; j--; outArr[MaxBit-1-N+j]++; } if (j==1 && outArr[MaxBit-1-N+j]>=HighNum) return; } for (unsigned int i = MaxBit-N; i < MaxBit; i++) { if (i == MaxBit-N) cout << HighBit[outArr[i]-1]; else cout << OtherBit[outArr[i]-1]; } cout << endl; } } int main() { unsigned number = 0; cin >> number; for (unsigned i = 0; i < MaxBit; i++) outArr[i] = 0; // 依次输出位数为1,2,3...n-1位的数 for (unsigned i = 1; i <= number; i++) PrintAllNumberWithNBits(i); return 0; }
相关文章推荐
- 输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3
- 输入数字 n,按顺序输出从 1 最大的 n 位 10 进制数
- 打印输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999。
- 输入数字n,按顺序输出从1到最大的n位10进制数
- 输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999
- 输入16进制的数字输出10进制
- 1、 输入一串字符,只包含“0-10”和“,”找出其中最小的数字和最大的数字(可能不止一个),输出最后剩余数字个数。
- 输入一个字符串只包含“0~10”和”,“找出最小的数字和最大的数字(可能不止一个),输出最后剩余数字的个数,如输入”3,3,4,5,6,7,7“
- 设一个长度为10的整型数组, 0)要求每个元素的值通过scanf输入,输入完成后, 1)请顺序输出这些整数, 2)请倒序输出这些整数, 3)输出这些数中的最大值, 4)输出这些数中的最小值
- 【1】 设一个长度为10的整型数组,  0)要求每个元素的值通过scanf输入,输入完成后,  1)请顺序输出这些整数,  2)请倒序输出这些整数,  3)输出这些数中的最大值,最小值
- C#--第2周实验--任务10--编写一个控制台应用--输入一个整数,将其各位数字颠倒顺序后输出
- 输入一串字符,只包含“0-10”和“,”,找出其中最小的数字和最大的数字(可能不止一个),输出最后剩余数字个数
- 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8
- input 输入数字而且最大为10
- 输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
- 随机给定10个小于10的数字(出现的数字可能重复),从其中取出3个各不相同的数字可组合出多个不同的3位数,请输出这些3位数中最大的那个3位数
- input 输入数字而且最大为10
- 输入一批整数,输出其中的最大值和最小值,输出数字0时结束
- C语言实现输入三个数字后按大小顺序将三个数字输出
- 题目:输入5个数(含负数、小数)将它们按由小到大的顺序排列起来 提示:需要排数的数字通过参数传递进来, 例如:输入:./a.out -1 2.1 -3 5 7 输出: -3 -1 2.