zoukankan      html  css  js  c++  java
  • 剑指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 }
  • 相关阅读:
    C++调用dll
    地图匹配技术在车载导航系统中的应用
    卡尔曼滤波器原理说明
    SharePoint 2010 托管元数据批量操作小工具
    SharePoint 常用开发工具
    tagMapping 在SharePoint中的应用
    SharePoint 2010 通配符搜索
    SharePoint 2010 一步步创建发布式站点 创建母版页二
    为SharePoint 文档库图片创建缩略图
    在Visual Studio 2010 快速查找Assembly 信息
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/11249443.html
Copyright © 2011-2022 走看看