欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

打印1到最大的n位数

程序员文章站 2024-03-15 22:08:48
...
思路:

因为是大数,所以只能用数组或者字符串操作;因为需要判断打印到n个9为止,不需要每次判断,只需要在最高位产生进位的时候判断。
方法一:直接操作

   public class solution{
   ------------------------------------------------
             用字符数组处理
        public void Print1ToMaxOfNDigits(int n){
         if(n<0)
              return;
         char[] number=new char[n+1];
         if(!Increment(number)){
             PrintNum(number);
          }
        }
  ------------------------------------------------
        加1操作,从低位开始+1+carry,如果小于10,直接加1后break;
        如果大于10,则改位为+sum-10的值,置carry=1;如果最高位的值大于10,则说明溢出了,停止打印。
        public  boolean Increment(char[] number){
            boolean isOverflow=false;
            int carry=0;
            int length=number.length;
        //int sum=1;
            for(int length-1;i>=0;i--){
                int sum=number[i]-'0'+carry;
                if(i==length-1)
                     sum++;
                if(sum>=10){
                     if(i==0)
                      { 
                        isOverflow=true;
                      } else{
                         sum-=sum;
                         carry=1;
                         number[i]=sum+'0';
                     }   
                }else {
                         number[i]=sum+'0';
                         break;
                }   
        }
    }
  ------------------------------------------------
   打印数字,需要处理始位为0的情况。
    public void printNum(char[] number){
       boolean isBeginning0=true;
       for(int i=0;i<number.length;i++){
             if( isBeginning0&&number[i]!='0'){
                     isBeginning0=false;
             }
             if(!isBeginning0){
                    System.out.println(number[i]);
             }
       }
    }
 }
   

方法二:递归法

 public void Print1ToMaxOfNDigits(int n){
        if(n<0)
             return;
        char* [] number=new char[n+1];
        char[n]='\0'
        for(int i=0;i<10;i++){
               number[0]=i+'0';
               helper(0,n,number);
        }
 }
void helper(int index,int length,char* [] number){
      if(index==length-1){
            PrintNum(number)
            return;//递归结束;
       }
       for(int i=0;i<10;i++){
           number[index+1]=i+'0';
           helper(index+1,length,number);
       }
}
 public void printNum(char[] number){
          boolean isBeginning0=true;
          int length=number.length;
          for(int i=0;i<length;i++){
                if(isBeginning0&&number[i]!='0')
                           isBeginning=false;
                if(!isBeginning0){
                           System.out.println(number[i]);
                }
          }
          
}