码迷,mamicode.com
首页 > 其他好文 > 详细

【剑指offer】17、打印从1到最大的n位数

时间:2018-07-20 00:20:17      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:for   方法   col   dex   模拟   false   span   最大的   常用   

题目

输入数字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");
}

 

【剑指offer】17、打印从1到最大的n位数

标签:for   方法   col   dex   模拟   false   span   最大的   常用   

原文地址:https://www.cnblogs.com/shiganquan/p/9339080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!