zoukankan      html  css  js  c++  java
  • 剑指Offer10 打印1到最大n位数

      1 /*************************************************************************
      2     > File Name: 10_PrintToMaxNum.c
      3     > Author: Juntaran
      4     > Mail: JuntaranMail@gmail.com
      5     > Created Time: 2016年08月30日 星期二 00时47分36秒
      6  ************************************************************************/
      7 
      8 #include <stdio.h>
      9 #include <malloc.h>
     10 #include <string.h>
     11 
     12 
     13 void PrintNumber(char* number)
     14 {
     15     bool isBeginning0 = true;
     16     int length = strlen(number);
     17     
     18     for (int i = 0; i < length; ++i)
     19     {
     20         if (isBeginning0 && number[i]!='0')
     21             isBeginning0 = false;
     22         
     23         if (!isBeginning0)
     24             printf("%c", number[i]);
     25     }
     26     printf("	");
     27 }
     28 
     29 
     30 bool Increment(char* number)
     31 {
     32     bool isOverflow = false;
     33     int length = strlen(number);
     34     int TakeOver = 0;
     35     
     36     for (int i = length-1; i >= 0; i--)
     37     {
     38         int sum = number[i] - '0' + TakeOver;    // 进位
     39         if (i == length - 1)
     40             sum ++;
     41         
     42         if (sum >= 10)
     43         {
     44             if (i == 0)
     45                 isOverflow = true;
     46             else
     47             {
     48                 sum -= 10;
     49                 TakeOver = 1;
     50                 number[i] = sum + '0';
     51             }
     52         }
     53         else
     54         {
     55             number[i] = sum + '0';
     56             break;
     57         }
     58     }
     59     return isOverflow;
     60 }
     61 
     62 // 从1打印到最大的n位数
     63 void PrintToMaxNum1(int n)
     64 {
     65     if (n <= 0)
     66         return;
     67     
     68     char* number = (char*)malloc(sizeof(char)*(n+1));
     69     memset(number, '0', n);
     70     number[n] = '';
     71     
     72     while (!Increment(number))
     73     {
     74         PrintNumber(number);
     75     }
     76     free(number);
     77 }
     78 
     79 
     80 /************************************************************************/
     81 // 递归写法
     82 void PrintToMaxNumRecursively(char* number, int length, int index)
     83 {
     84     if (index == length-1)
     85     {
     86         PrintNumber(number);
     87         return;
     88     }
     89     for (int i = 0; i < 10; ++i)
     90     {
     91         number[index+1] = i + '0';
     92         PrintToMaxNumRecursively(number, length, index+1);
     93     }
     94 }
     95 
     96 void PrintToMaxNum2(int n)
     97 {
     98     if (n <= 0)
     99         return;
    100     
    101     char* number = (char*)malloc(sizeof(char)*(n+1));
    102     number[n] = '';
    103     
    104     for (int i = 0; i < 10; ++i)
    105     {
    106         number[0] = i + '0';
    107         PrintToMaxNumRecursively(number, n, 0);
    108     }
    109     free(number);
    110 }
    111 
    112 
    113 int main()
    114 {
    115     int n = 5;
    116     PrintToMaxNum1(n);
    117     PrintToMaxNum2(n);
    118 }
  • 相关阅读:
    如何用ST-LINK给STM32下载HEX文件
    快恢复二极管和肖特基二极管的区别和是否能够替代使用?
    Python环境变量配置
    IAP笔记
    如何将24位RGB颜色转换16位RGB颜色
    内网外网同时使用
    bootstraptable 服务端分页问题
    weblogic奇葩问题
    SSM框架
    java通过poi操作excel
  • 原文地址:https://www.cnblogs.com/Juntaran/p/5820394.html
Copyright © 2011-2022 走看看