#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n;
//bool Increment(char *number) {
//
// int nsum = 0, ntakeover = 0; //对进位问题的精确控制。
// int length = strlen(number);
// for (int i = length-1; i >= 0; --i) {
//
// nsum = number[i] - '0' + ntakeover;
// if(i == length-1)
// nsum++;
// if(nsum >= 10){
//
// if(i == 0){
// return false;
// }else {
//
// nsum -= 10;
// ntakeover = 1;
// number[i] = nsum + '0';
//
// }
//
// }else {
//
// number[i] = nsum + '0';
// break;
// }
// }
// return true;
//}
void printNumber(char *number) {
bool flag = true;
int length = strlen(number);
for(int i = 0; i < length; i++){ //去除前导零的方法;
if(flag && number[i] != '0')
flag = false;
if(!flag)
printf("%c", number[i]);
}
printf("\n");
}
void PrintToMaxofNDigitsrecursively(char *number, int length, int index) {
if(index == length - 1){
printNumber(number);
return;
}
for(int i = 0; i < 10; ++i){
number[index+1] = '0' + i;
PrintToMaxofNDigitsrecursively(number, length, index+1);
}
}
void PrintToMaxofNDigits(int n) {
if(n <= 0)
return;
char *number = new char[n+1]; //动态申请数组大小;
memset(number, '0', sizeof(number)); //所有位都设置位字符零;
number[n] = '\0'; //字符数组的结束条件
// while(Increment(number)) { //非递归写法;
//
// printNumber(number);
// }
for(int i = 0; i < 10; ++i) {
number[0] = '0' + i;
PrintToMaxofNDigitsrecursively(number, n, 0);
}
delete []number;
}
int main()
{
while(scanf("%d", &n) != EOF) {
PrintToMaxofNDigits(n);
}
return 0;
}
打印1 到最大的n位数
最新推荐文章于 2025-11-30 19:11:04 发布
8398

被折叠的 条评论
为什么被折叠?



