zoukankan      html  css  js  c++  java
  • 每天一道算法题(15)——打印1到最大的n位数

    题目

                打印1到最大的n位数。如n=4,打印1-9999。


    思路

           由于直接使用循环会导致int或者long long都不够存储。因此使用字符串来存储数据,这里涉及到数字转换成字符串以及字符串的加法。


    代码

         1.使用递归思路

               可以认为。从高位到低位,高位数先固定,在此情况下,低位数依次调整。每一位涉及0-9调整,这里每一级的都要嵌套10次。

         

    void printMax(char* number,const int index,const int size){//嵌套打印函数,size为总的位数
    	if(!number)
    		return ;
    	if(index==size){//嵌套截止条件
    		show(number);
    		return ;
    	}
    	for(int i=0;i<10;i++){
    		number[index]=i+'0';//index---当前调整的位数
    		printMax(number,index+1,size);
    	}
    }
    void print2(const int& n){//主函数
    	if(n<=0)
    		return ;
    	char* number=new char[n+1];
    	memset(number,'0',(n+1)*sizeof(char));number[n]='';
    	printMax(number,0,n);delete []number;
    }


         2.假设不使用递归思路

                    则单次循环是对上次循环产生的数的+1。即要模拟加法过程。这里使用了进位辅助数组,当最高位产生进位时,循环停止。

    void increment(char* num,int size,int* add){//单次增1函数
    	if(!num||!add||size<=0)
    		return;
    	char* number=num+size-1;//从最后一位开始变化
    	for(int i=size-1;i>=0;i--){
    		if(*number-'0'+add[i+1]==10){//产生进位
    			*number='0';
    		        add[i]=1;//存储进位
    			number--;//指针前移
    		}
    		else{
    			*number=*number+add[i+1];
    			 add[i+1]=0;//删除进位信息
    			 break;
    		}
    	}
    }
    void printMax(const int& n){//主函数
    	if(n<=0)
    		return;
    
    	char* num=new char[n+1];//数字存储字符串
    	int* add=new int[n+1];//进位辅助数组,代表当前是否产生进位
    	memset(num,'0',(n+1)*sizeof(char));	num[n]='';
    	memset(add,0,(n+1)*sizeof(int));
        
    	while(1){
    		add[n]=1;
    		increment(num,n,add);
    		if(add[0])//最高位产生进位,循环打印停止
    			break;
    		show(num);//打印数字
    	}
    
    	delete  []num;
    	delete  []add;
    }
       

       3.字符串打印函数

    void show(const char* num){
    	const char* p=num;
    	while(*p=='0')
    		p++;
    	if(*p)//*p=''
            cout<<p<<endl;
    }





         





  • 相关阅读:
    P2494 [SDOI2011]保密 最小割
    P2765 魔术球问题
    [CTSC2008]祭祀river
    CF311E Biologist
    P4177 [CEOI2008]order
    函数的形参和实参
    python字符编码
    源码安装Vim并配置YCM自动补全插件
    Python基础练习之购物车
    Python字符串的所有操作
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5393024.html
Copyright © 2011-2022 走看看