打印1到最大的n位数

来源:互联网 发布:神话刷号软件 编辑:程序博客网 时间:2024/05/15 01:30


#include <iostream>#include <string>using namespace std;// 参考《剑指offer》P94bool increment_number(char *number){  int take_over = 0;  int len = strlen(number);  for (int i = len - 1; i >= 0; --i){    int sum = number[i] - '0' + take_over;    // 最后一位加一    if(i == len - 1){      ++sum;    }    if(sum >= 10){      sum -= 10;      number[i] = '0' + sum;      take_over = 1;      // 进位到第0位,已经到达最大值      if(i == 0)        return true;    }    else {      number[i] = '0' + sum;      return false;    }  }  return true;}void print_number(char *number){  int len = strlen(number);  bool flag = true;  for (int i = 0; i < len; ++i){    if (flag){      if (number[i] == '0')        continue;      flag = false;    }    cout << number[i];  }  cout << endl;}void print_1_to_max_of_n_digits_core1(char *number, int n, int index){  if(index == n - 1){    print_number(number);    return;  }  for(int i = 0; i < 10; ++i){    number[index + 1] = '0' + i;    print_1_to_max_of_n_digits_core1(number, n, index + 1);  }}void print_1_to_max_of_n_digits_core2(char *number, int n, int index){  for(int i = 0; i < 10; ++i){    number[index] = '0' + i;    if(index == n - 1){      print_number(number);      continue;    }    print_1_to_max_of_n_digits_core2(number, n, index + 1);  }}void print_1_to_max_of_n_digits(int n){  if(n <= 0)    return;  char *number = new char[n + 1];  memset(number, '0', n);  number[n] = '\0';  // 大数加法解法  //while(!increment_number(number))  //  print_number(number);  // 全排列解法1  //for(int i = 0; i < 10; ++i){  //  number[0] = '0' + i;  //  print_1_to_max_of_n_digits_core1(number, n, 0);  //}  // 全排列解法2  print_1_to_max_of_n_digits_core2(number, n, 0);  delete [] number;}int main(){  print_1_to_max_of_n_digits(2);  int ttt = 0;  return 0;}


0 0
原创粉丝点击