程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 劍指offer編程題Java實現——面試題12打印1到最大的n位數

劍指offer編程題Java實現——面試題12打印1到最大的n位數

編輯:關於JAVA

劍指offer編程題Java實現——面試題12打印1到最大的n位數。本站提示廣大學習愛好者:(劍指offer編程題Java實現——面試題12打印1到最大的n位數)文章只能為提供參考,不一定能成為您想要的結果。以下是劍指offer編程題Java實現——面試題12打印1到最大的n位數正文


題目:打印1到最大的n位數

輸入數字n,按順序打印輸出從1到最大的n位十進制數,比如輸入3,打印從1到999.

這道題考察的地方是如何表示大數問題。由於n是任意大的數組,如果n太大的話n位數就超過了long型能夠表示的范圍,在面試題11求數值的整數次方的時候題目中已經明確的提示了不考慮大數問題,在這道題中,用字符串或者數組表示大數是一種很簡單有效的方法。用字符串表示大數也適用於大數加法、大數減法和大數的乘法問題。

下面代碼是使用數組方式實現大數的產生和打印,在這道題中要特殊考慮的地方是如果實現整數+1,以及低位+1產生的進位問題的處理,還有要如何判斷當前數字是否是最大的n位數。

 

 1 package Solution;
 2 
 3 /**
 4  * 劍指offer面試題12:打印1到最大n位數
 5  * 題目:輸入數字n,按順序打印從1到最大的n位十進制數。
 6  * 比如:輸入3,則打印1,2,3一直到999
 7  * 解法一:使用數組表示大數
 8  * @author GL
 9  *
10  */
11 public class No12PrintOneToMaxNthDigits {
12 
13     //使用數組實現對數進行+1操作
14     public static boolean increment(int[] number){
15         if(number.length<1)
16             throw new RuntimeException("invalid lenth of array");
17         //最高位產生進位標志,則數組中的數為最大的n位整數
18         boolean isOverFlow=false;
19         //進位位
20         int carry=0;
21         //沒有產生進位的+1,循環只運行1次,產生一個進位,循環多運行一次
22         for(int i=number.length-1;i>=0;i--){
23             int sum=number[i]+carry;
24             if(i==number.length-1)
25                 sum++;//最低位+1
26             if(sum>=10){
27                 //最高位產生進位
28                 if(i==0)
29                     isOverFlow=true;
30                 //普通位產生進位
31                 else{
32                     carry=1;
33                     number[i]=0;
34                     sum=0;
35                 }
36             }else{
37                 //普通位+1的結果保存到數組中,+1後程序退出循環
38                 number[i]=sum;
39                 break;
40             }
41         }
42         return isOverFlow;
43     }
44     //打印數組中表示的數,如果數組中表示的數字位數小於n,則不打印前面的0
45     public static void print(int[] number){
46         boolean isBeginning=true;
47         for(int i=0;i<number.length;i++){
48             if(isBeginning&&number[i]!=0)
49                 isBeginning=false;
50             if(!isBeginning)
51                 System.out.print(number[i]);
52         }
53     }
54     public static void main(String[] args) {
55         int[] number=new int[3];
56         while(!increment(number)){
57             print(number);
58             System.out.println();
59         }
60     }
61 }
數組實現大位數的表示

在實現+1的方法中,使用一個全局變量來表示是否是最大的n位數,也就是當數組的最低位array[0]產生進位的時候就已經達到了n位最大數。另外在實現+1操作時候,如果低位產生進位要將進位位加到高位上。

打印數字采用的是每生成一個數字,判斷此數字是否是最大的n位數,如果不是則打印,然後數字+1,再判斷打印的過程。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved