1. 程式人生 > >【劍指offer】17、打印從1到最大的n位數

【劍指offer】17、打印從1到最大的n位數

++ lse style ret char bsp 大數問題 要求 dig

題目

輸入數字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位數