题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1,2,3一直到最大的3位数即999。
1 /* 解法1: 2 此题应该注意大数的情况。 3 因此用字符串来模拟大数。 4 具体思路:首先把字符串的每一个数字都初始化为‘0’, 5 然后每一次为字符串表示的数字加1, 在打印出来。 6 即:1、在字符串表示的数字上模拟加法;Increment(n) 7 2、把字符串表示的数字打印出来。PrintNumber(n) 8 */ 9 #include <iostream> 10 using namespace std; 11 12 void PrintNumber(char* n){ 13 int len = strlen(n); 14 int i = 0; 15 while( i < len && n[i] == '0' ) // 不打印前导0 16 i++; 17 bool flag = false; 18 while(i < len){ 19 cout << n[i++]; 20 flag = true; 21 } 22 if (flag) // 保证当数字为0时,不输出空格 23 cout << endl; 24 } 25 26 bool Increment(char* n){ 27 bool isOverflow = false; 28 int len = strlen(n); 29 int carry = 0; 30 for (int i = len-1; i >= 0; i--){ 31 int nSum = n[i] - '0' + carry; 32 if (i == len-1) 33 nSum++; 34 if (nSum >= 10){ 35 if (i == 0) 36 isOverflow = true; 37 else{ 38 nSum -= 10; 39 carry = 1; 40 n[i] = '0' + nSum; 41 } 42 } 43 else{ // 无需再进位 44 n[i] = '0' + nSum; 45 break; 46 } 47 } 48 return isOverflow; 49 } 50 51 void Print1ToMaxOfNDigits(int n){ 52 if (n <= 0) 53 return; 54 char *number = new char[n+1]; 55 memset(number, '0', n); 56 number[n] = '