Q12:打印1到最大的n位数

本文介绍了一种打印从1到最大的n位数的方法,包括两种不同的实现方式:一种是基本解法,可能会遇到溢出问题;另一种是通过递归实现的更稳定方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2016-07-13

Q12:打印1到最大的n位数

public class Q12 {

   /**

    * 题目:打印1到最大的n位数

    * 题目说明:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出123一直到最大的3位数即999.

    */

   public static void main(String[] args) {

      // TODOAuto-generated method stub

      Q12 test = new Q12();

      //test.Print1ToMaxOfNDigits_1(2);

      test.Print1ToMaxOfNDigits_2(4);

   }

   //最基本的解法,存在越界溢出现象,不稳定。

   public void Print1ToMaxOfNDigits_1(int n){

      int number = 1;

      int i = 0;

      //用来控制第n+1位的最小数(例如,输入n=2,number100

      while(i<n){

         number *= 10;

         i++;

      }

      for(i=0;i<number;i++){

         System.out.println(i);

      }

   }

   //把问题转换成数字排列的问题,利用递归实现。

   //参数n表示的是一共有多少位

   public void Print1ToMaxOfNDigits_2(int n){

      //输入n 则定义一个一维n个元素的数组

      int[] array = new int[n];

      if(n<0)

         return;

      PrintArray(array,0);//此处为0时,是从1打印到n位最大数,如果是1则打印n-1位最大数,如果是2则打印n-2为最大数。

      //排序从第0位开始

   }

   private void PrintArray(int[] array, int n){

      //每一位上的数字都是从0-9的一个全排列

      for(int i=0; i<10; i++){

         if(n!=array.length){

            array[n]=i;

            PrintArray(array, n+1);

         }else {

            boolean isFirstNo0=false;//布尔变量控制第一个非0字符之前的0不打印

            for(int j=0; j<array.length; j++){

                if(array[j]!=0){

                   System.out.print(array[j]);

                   if(!isFirstNo0)

                      isFirstNo0=true;

                }else {

                   if(isFirstNo0)

                      System.out.println(array[j]);

                }

            }

            System.out.println();

            return;

         }

      }

   }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值