• 海涛老师的面试题作业12打印从1到最大的n位数


    View Code
      1 // 打印从1到最大的n位数.cpp : 定义控制台应用程序的入口点。
      2 //
      3 
      4 /********************************************
      5 
      6 题目:输入数字n,按顺序打印从1到最大的n位十进制数,
      7 比如3,则打印1,2,3,一直到999;
      8  
      9 ********************************************/
     10 
     11 #include "stdafx.h"
     12 #include <string.h>
     13 #include <iostream>
     14 using namespace std;
     15 
     16 void PrintNumber(char* Number)
     17 {
     18     bool isBegin=true;
     19     int nLength=strlen(Number);
     20     for(int i=0;i<nLength;i++)
     21     {
     22         if(isBegin&&Number[i]!='0')
     23             isBegin=false;
     24         if(!isBegin)
     25             cout<<Number[i];
     26     }
     27     cout<<"\t";
     28 }
     29 
     30 bool Increment(char* Number)
     31 {
     32     bool IsOverflow=false;
     33     int  nTakeOver=0;
     34     int  nLength=strlen(Number);
     35     for(int i=nLength-1;i>=0;i--)
     36     {
     37         int nSum=Number[i]-'0'+nTakeOver;
     38         if(i==nLength-1)
     39             nSum++;
     40         if(nSum>=10)
     41         {
     42             if(i==0)
     43                 IsOverflow=true;
     44             else
     45             {
     46                 nSum-=10;
     47                 nTakeOver=1;
     48                 Number[i]=nSum+'0';
     49             }
     50         }
     51         else
     52         {
     53             Number[i]='0'+nSum;
     54             break;
     55         }
     56     }
     57     
     58         return IsOverflow;
     59 }
     60 
     61 
     62 void Print1ToMaxOfDigits(int n)
     63 {
     64     if(n<0)
     65         return;
     66     char *Number=new char[n+1];
     67     memset(Number,'0',n);
     68     Number[n]='\0';
     69     while(!Increment(Number))
     70         PrintNumber(Number);
     71     delete []Number;
     72 }
     73 
     74 
     75 
     76 
     77 void Print1ToMaxNDigitsRecur(char *Number,int Length,int index)
     78 {
     79     if(index==Length-1)
     80     {
     81             PrintNumber(Number);
     82             return;
     83     }
     84     for(int i=0;i<10;++i)
     85     {
     86         Number[index+1]=i+'0';
     87         Print1ToMaxNDigitsRecur(Number,Length,index+1);
     88     }
     89 }
     90 
     91 
     92 void Print1ToMaxtOfNDigits(int n)
     93 {
     94     if(n<=0)
     95         return;
     96     char* Number=new char[n+1];
     97     Number[n]='\0';
     98     for(int i=0;i<10;i++)
     99     {
    100         Number[0]=i+'0';
    101         Print1ToMaxNDigitsRecur(Number,n,0);
    102     }
    103 }
    104 
    105 int _tmain(int argc, _TCHAR* argv[])
    106 {
    107     //Print1ToMaxOfDigits(5);
    108     Print1ToMaxtOfNDigits(5);
    109     return 0;
    110 }
  • 相关阅读:
    python学习2(转载)
    python学习1
    第三方授权登录
    新浪微博开发者平台应用申请及配置说明
    新浪微博登录第三方网站实现原理是什么?
    Redis中PipeLine使用
    发送短信验证码的功能开发
    Python celery原理及运行流程
    设置django缓存+验证码图片接口
    编写注册接口
  • 原文地址:https://www.cnblogs.com/cslave/p/2566273.html
Copyright © 2020-2023  润新知