public class Demo12 {
public boolean Increment(int[] number){ // 这个方法是用来实现对数加1操作
boolean isOverflow = false;
int nTakeOver=0;
for(int i=number.length-1;i>=0;i--){
int nSum = number[i]+nTakeOver;
if(i==number.length-1)
nSum++;
if(nSum>=10){
if(i==0)
isOverflow=true;
else{
nTakeOver=1;
nSum=nSum-10;
number[i]=nSum;
}
}
else{
number[i]=nSum;
break;
}
}
return isOverflow;
}
//去掉尾部元素前面的0元素
public void PrintNumber(int[] number){
boolean isBeginning=true;
for(int i=0;i<number.length;i++){
if(isBeginning&&number[i]!=0)
isBeginning=false;
if(!isBeginning){
System.out.print(number[i]);
}
}
}
/*
* 对每位进行自加操作,当sum>=10,重置sum为0,nTakeOver=1,
* 进而number[i]产生进位nSum = number[i]+nTakeOver;number[i]=nSum;
*/
public void Test(int n){
if(n<=0)
System.out.println("输入出错,请重新输入!");
int[] number = new int[n];
while(!Increment(number)){
PrintNumber(number);//第一次为全0的基础加1,有输出
System.out.println();
}
}
public void PrintMaxOfNdigits(int[] number,int length,int index){
if(index == length-1)
{
PrintNumber(number);//当全0时,无输出,第一次总是执行换行操作
System.out.println();
return;
}
for(int i=0;i<10;i++){
number[index+1]=i;
PrintMaxOfNdigits(number, length, index+1);
}
}
//通过递归,排列n位数各种组合
public void Test1(int n){
if(n<=0)
return;
int[] number = new int[n];
for(int i=0;i<10;i++){
number[0]=i;
PrintMaxOfNdigits(number, n, 0);
}
}
public static void main(String[] args) throws Exception {
Demo12 demo=new Demo12();
demo.Test(3);
//demo.Test1(3);
}
}
面试题12:打印1到最大的n位数
最新推荐文章于 2019-12-10 23:56:12 发布