题目
输入数字n,按顺序打印从1到最大n位的十进制数。比如输入3,打印1到999。
思路
输入的数字可以很大,可以是33,65,这样的话int和long long都不能满足题目要求,所以这是一个大数问题。
大数问题经常用字符串来解决
我们当然可以用字符串来模拟加法
最方法的方法应该是做一个n位的全排列,每位可以取0~9
void Print1toMaxOfNDigits(int n){ if (n <= 0) return; char* number = new char[n+1]; number[n]=‘\0‘; for (int i = 0; i < 10; i++) { number[0] = i + ‘0‘; Print1ToMaxOfNDigitsRecursively(number,n,0); } delete[] number; } void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index){ if (index == length - 1) { PrintNumber(number); return; } for (int i = 0; i < 10; i++) { number[index+1] = i + ‘0‘; Print1ToMaxOfNDigitsRecursively(number, length, index + 1); } } void PrintNumber(char* Number){ bool isBegin = true; int nLength = strlen(number); for (int i = 0; i < nLength; i++) { if (isBegin && number[i] != ‘0‘) isBegin = false; if (!isBegin) printf("%c", number[i]); } printf("\t"); }
原文地址:https://www.cnblogs.com/shiganquan/p/9339080.html
时间: 2024-11-05 20:24:09