• 剑指offer 打印从1到最大的n位数


    题目描述:

    输入数字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.

     1 #include <iostream>
     2 #include <algorithm> 
     3 #include <cstdio>
     4 #include <cstring>
     5 using namespace std;
     6 void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index);
     7 
     8 void PrintNumber(char* number) {
     9     int index = 0;
    10     bool isBeginning0 = true;
    11     int nlength = strlen(number);
    12     //索引到左边第一位不为0的下标。特别注意的是整个字符串全为0的情况
    13     for (int i = 0; i < nlength; i++) {
    14         if (number[i] != '0') {
    15             index = i;
    16             break;
    17         }
    18     }
    19     if (!(index == 0 && number[index] == '0')) {
    20         for (int i = index; i < nlength; i++) {
    21             printf("%c", number[i]);
    22         }
    23         printf("
    ");
    24     }
    25 }
    26 
    27 void Print1ToMaxOfNDigits(int n) {
    28     if (n <= 0) {
    29         return;
    30     }
    31     char *number = new char[n + 1];
    32     number[n] = '';
    33     for (int i = 0; i < 10; i++) {
    34         number[0] = i + '0';
    35         Print1ToMaxOfNDigitsRecursively(number, n, 0);
    36     }
    37     delete [] number;
    38 }
    39 
    40 void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index) {
    41     if (index == length - 1) {
    42         PrintNumber(number);
    43         return;
    44     }
    45     for (int i = 0; i < 10; i++) {
    46         number[index + 1] = i + '0';
    47         Print1ToMaxOfNDigitsRecursively(number, length, index + 1);
    48     }
    49 }
    50 
    51 int main() {
    52     int number;
    53     while (cin >> number) {
    54         Print1ToMaxOfNDigits(number);
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    排序数据记录查询
    条件数据记录查询
    简单数据记录查询
    缓冲流
    转换流
    删除数据记录
    更新数据记录
    插入数据记录
    移动前端自适应适配布局解决方案和比较
    如何解决inline-block元素的空白间距
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/11249443.html
Copyright © 2020-2023  润新知