输出0到最大的n位数
2012-08-28 11:11
120 查看
1. 描述
输入数字 n,按顺序输出从 0 最大的 n 位 10 进制数。比如输入 3,则输出 0、1、2、3 一直到最大的 3位数,即 999。
2. 思路
方法一,求出最大的n位数(10^3 - 1),然后由一个循环控制输出。
方法二,当n很大时,方法一不再适用,此时可用字符串模拟数字运算,代码较长。
方法三,由<字符串的排列和组合>的递归算法得到启示,可以利用递归求解。
下面就用方法三求解了!
如果在数字前面补 0 的话,则 n 位所有 10 进制数就是 从 0 到 9 (n个数,从0到9任取3个,可重复取)的全排列。即,把数字的每一位都从 0 到 9 排列一遍,就得到了所有的 10 进制数。此时们在输出的时候,去掉前导的零即可。
代码如下:
其中递归算法print1ToMaxOfNDigitsRecursively如下:
打印函数printNumber如下:
测试如下:
Output:
输入数字 n,按顺序输出从 0 最大的 n 位 10 进制数。比如输入 3,则输出 0、1、2、3 一直到最大的 3位数,即 999。
2. 思路
方法一,求出最大的n位数(10^3 - 1),然后由一个循环控制输出。
方法二,当n很大时,方法一不再适用,此时可用字符串模拟数字运算,代码较长。
方法三,由<字符串的排列和组合>的递归算法得到启示,可以利用递归求解。
下面就用方法三求解了!
如果在数字前面补 0 的话,则 n 位所有 10 进制数就是 从 0 到 9 (n个数,从0到9任取3个,可重复取)的全排列。即,把数字的每一位都从 0 到 9 排列一遍,就得到了所有的 10 进制数。此时们在输出的时候,去掉前导的零即可。
代码如下:
void print1ToMaxOfNDigits(int n) { if (n <= 0) return ; char number[n + 1]; number = '\0'; //number[0...n-1]存放n位数,number 为结束标志'\0' int i; for (i = 0; i < 10; i++) //n位数的最高位: 0, 1, ..., 9 { number[0] = i + '0'; print1ToMaxOfNDigitsRecursively(number, n, 0); } }
其中递归算法print1ToMaxOfNDigitsRecursively如下:
void print1ToMaxOfNDigitsRecursively(char number[], int n, int index) { if (n == index + 1) { printNumber(number); return ; } int i; for (i = 0; i < 10; i++) { number[index + 1] = i + '0';// 对0, 1, ..., 9 n位数的每一位都会选择一遍 print1ToMaxOfNDigitsRecursively(number, n, index + 1); } }
打印函数printNumber如下:
void printNumber(char number[]) { char *p; for (p = number; *p; p++) //从最高位开始,找到第一个非零数字 if (*p != '0') break; if (*p) printf("%s\n", p); else printf("0\n"); }
测试如下:
#include <stdio.h> void print1ToMaxOfNDigits(int n); void print1ToMaxOfNDigitsRecursively(char number[], int n, int index); void printNumber(char number[]); int main(void) { print1ToMaxOfNDigits(1); return 0; }
Output:
相关文章推荐
- 随机给定10个小于10的数字(出现的数字可能重复),从其中取出3个各不相同的数字可组合出多个不同的3位数,请输出这些3位数中最大的那个3位数
- 数据结构练习(28)输出1到最大的N位数
- 输出1到最大的N位数(运算)
- 输出1到最大的N位数 的迭代解法
- 程序员面试题精选100题(38)-输出1到最大的N位数[算法]
- 输出1到最大的N位数
- 【转帖】输出1到最大的N位数
- 打印输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999。
- 输出1到最大的N位数
- 65.输出1到最大的N位数(运算)
- 输出1到最大的N位数
- 输出1到最大的N位数
- 输出1到最大的N位数
- C语言输出从1到最大的n位数
- 65 输出1 到最大的N 位数
- 程序员面试题精选100题(38)-输出1到最大的N位数
- 程序员面试题精选100题(38)-输出1到最大的N位数
- 输出1到N位数最大值的全部数字
- 输出1到最大的N位数
- 输出1到最大的N位数 【微软面试100题 第六十五题】