题目描述:

输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数999.

分析:注意不能直接输入最大的n位十进制数,因为可能属于大数,这个数无法用int或者long long存储,因此需要用字符串表示。

思路:我们用n位全排列解法,每一位都可以是0~9的数。利用递归解法。需要注意的是前导0不要输出,比如一位的时候只打印1-9, 2位的时候打印1-9(而不是01、···)、10-99.

 #include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index); void PrintNumber(char* number) {
int index = ;
bool isBeginning0 = true;
int nlength = strlen(number);
//索引到左边第一位不为0的下标。特别注意的是整个字符串全为0的情况
for (int i = ; i < nlength; i++) {
if (number[i] != '') {
index = i;
break;
}
}
if (!(index == && number[index] == '')) {
for (int i = index; i < nlength; i++) {
printf("%c", number[i]);
}
printf("\n");
}
} void Print1ToMaxOfNDigits(int n) {
if (n <= ) {
return;
}
char *number = new char[n + ];
number[n] = '\0';
for (int i = ; i < ; i++) {
number[] = i + '';
Print1ToMaxOfNDigitsRecursively(number, n, );
}
delete [] number;
} void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index) {
if (index == length - ) {
PrintNumber(number);
return;
}
for (int i = ; i < ; i++) {
number[index + ] = i + '';
Print1ToMaxOfNDigitsRecursively(number, length, index + );
}
} int main() {
int number;
while (cin >> number) {
Print1ToMaxOfNDigits(number);
}
return ;
}

最新文章

  1. Hawk使用补充说明
  2. 深入理解PHP内核(十)变量及数据类型-类型提示的实现
  3. mysql管理知识点
  4. 如何使用mybatis《三》
  5. 根据.MDF文件查看 SQL数据库的版本信息
  6. Android自定义遮罩层设计
  7. Project Euler 86:Cuboid route 长方体路径
  8. 在vs环境中跑动sift特征提取(代码部分)
  9. js替换字符串的所有示例代码
  10. android Uri获取真实路径转换成File的方法
  11. 数据库还原失败System.Data.SqlClient.SqlError: 无法执行 BACKUP LOG,因为当前没有数据库备份
  12. easygui的导入方式
  13. sql的left join 、right join 、inner join之间的区别
  14. 洛谷 P1141 01迷宫
  15. Repeater中使用条件的两种方法
  16. ThinkPHP 缓存技术详解 使用大S方法
  17. SoapUI Pro Project Solution Collection-access the soapui object
  18. Lecture 5
  19. 无法将 Ethernet0连接到虚拟网络 VMnet8 以及无法使用桥接的详细解决步骤
  20. java中的元数据

热门文章

  1. Python稀疏矩阵运算
  2. Codeforces Round #302 (Div. 2) D. Destroying Roads 最短路 删边
  3. csp-s2019 AFO记
  4. BZOJ 2281 Luogu P2490 [SDOI2011]黑白棋 (博弈论、DP计数)
  5. Oracle 字符串拼接会出现0自动忽略,解决方案
  6. 14 补充 MySQL的创建用户和授权
  7. git本地分支推送到远程分支
  8. nodejs 文件操作
  9. 将Microsoft SQL Server 2000数据库转换成MySQL数据库
  10. 编译mysql时CMake Error at cmake/readline.cmake:85 (MESSAGE)