`

java-65.输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999

 
阅读更多
参考了网上的http://blog.csdn.net/peasking_dd/article/details/6342984
写了个java版的:



public class Print_1_To_NDigit {

	/**
	 * Q65.输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999
	 * 1.使用字符串存放数字。int a=123 --> char[] a={'1','2','3'};
	 * 2.递归。设置好第n位(最高位,对应char数组的第0个元素)后,接下来设置第n-1,n-2.....位
	 * 3.打印时候,前面的0不输出,见printNumber(char[] number)
	 */
	public static void main(String[] args) {
		int n=3;
		Print_1_To_NDigit p=new Print_1_To_NDigit ();
		p.print(n);
	}

	public void print(int n){
		char[] result=new char[n];
		printHelpRecursive(result,n,0);
	}
	
	//from result[0] to result[n-1],set 0-9 into it
	public void printHelpRecursive(char[] result,int length,int index){
		if(index==length){
			printNumber(result);
		}else{
			for(int i=0;i<=9;i++){
				result[index]=(char)('0'+i);
				printHelpRecursive(result,length,index+1);
			}
		}
	}
	
	//don't print the prefix '0'.e.g,when "0012",print "12"
	public void printNumber(char[] re){
		int len=re.length;
		boolean canPrint=false;
		for(int i=0;i<len-1;i++){
			if(!canPrint&&re[i]!='0'){
				canPrint=true;
			}
			if(canPrint){
				System.out.print(re[i]);
			}
		}
		System.out.println(re[len-1]);//the last bit is always printed.
	}
}

分享到:
评论
3 楼 bylijinnan 2015-07-03  
sand_clock 写道
楼主代码有两个bug
1、没有判断n为负数的情况

2、void printNumber()写的不对,你的代码会输出0
错误代码:
public void printNumber(char[] re){ 
        int len=re.length; 
        boolean canPrint=false; 
        for(int i=0;i<len-1;i++){ 
            if(!canPrint&&re[i]!='0'){ 
                canPrint=true; 
            } 
            if(canPrint){ 
                System.out.print(re[i]); 
            } 
        } 
        System.out.println(re[len-1]);//the last bit is always printed. 
}
纠正代码:
public void printNumber(char[] re){ 
        int len=re.length; 
        boolean canPrint=false; 
        for(int i=0;i<len;i++){ 
            if(!canPrint&&re[i]!='0'){ 
                canPrint=true; 
            } 
            if(canPrint){ 
                System.out.print(re[i]); 
            } 
        } 
        System.out.println( );
}  

2 楼 sand_clock 2015-07-03  
楼主代码有两个bug
1、没有判断n为负数的情况

2、void printNumber()写的不对,你的代码会输出0
错误代码:
public void printNumber(char[] re){ 
        int len=re.length; 
        boolean canPrint=false; 
        for(int i=0;i<len-1;i++){ 
            if(!canPrint&&re[i]!='0'){ 
                canPrint=true; 
            } 
            if(canPrint){ 
                System.out.print(re[i]); 
            } 
        } 
        System.out.println(re[len-1]);//the last bit is always printed. 
}
纠正代码:
public void printNumber(char[] re){ 
        int len=re.length; 
        boolean canPrint=false; 
        for(int i=0;i<len;i++){ 
            if(!canPrint&&re[i]!='0'){ 
                canPrint=true; 
            } 
            if(canPrint){ 
                System.out.print(re[i]); 
            } 
        } 
        System.out.println( );
}  
1 楼 此与彼岸 2013-09-13  
     

相关推荐

Global site tag (gtag.js) - Google Analytics