[ Java習題 ] 使用switch敘述計算12個位數的長整數,其0~9各數出現的次數

這個題目困擾我約兩三個小時

最大的麻煩是該怎麼把數字各別提出來做處理



題目:

試設定一個剛好12個位數的長整數變數

並利用 switch 計算其0到9這十個數字中

每一個數字出現的次數





一開始原本是想要用陣列做計算

但是書上的進度尚未到陣列的章節

想想後果斷放棄 XDD

於是開始思考以下幾點


1. 如何將這12個數字一個個提出來做處理?

switch 敘述中的運算式可以為整數、字元以及字串( 字串似乎是後來 JDK7 所新增支援的 )

再來就是該如何把12個數字分開個別處理

這邊把長整數稱作為 a 變數

將 a 變數 % 10 會取得餘數,也就是 a 變數的最後一個數字

OK!這邊我們取出一個數字了

現在出現第二個問題




2.該怎麼把取出來的數字拿掉?

倘若 a 變數為 2973  ( 數字弄短一點比較明瞭 XD )

我已經使用 % 運算子得到餘數

而 a 變數的值仍為2973,那我該如何把最後一個位數的3拿掉?

這時我想起了整數對於小數點的特性

倘若將浮點數( float )與倍精度( double )轉為整數或者長整數當中

會無條件捨去小數點後面的數字

也就是說我可以把 a 變數除以 10 之後變成 297.3

而整數會因為其特性而把小數點拿掉而變成 297

 a 變數從四位數變成三位數

如此一來12位數的 a 變數只要重複12次一樣的流程便可將數字一個個提出作處理

( 本次使用for迴圈處理,有機會再來試試看while迴圈或者do while迴圈 )



3. 計算各數字出現的次數

為此我特別設了 0~9 的整數變數

用來計算各數字出現的次數

將過程中取得的餘數丟入switch做判斷並計算數字出現的次數

當12個位數都執行完之後就可以顯示次數了!



完整程式碼如下


  long a=123456789000L;
  int zero=0,one=0,two=0,three=0,four=0,five=0,six=0,seven=0,eight=0,nine=0;

  // a為一個12位數的長整數,因此迴圈要執行12次
  for(int i=1;i<=12;i++){

   // 利用%運算子除以10並取餘數,再依照餘數去計算出現次數
   switch((int)(a%10)){
   
   case 0:
    zero++;
   break;
   
   case 1:
    one++;
   break;
   
   case 2:
    two++;
   break;
   
   case 3:
    three++;
   break;
   
   case 4:
    four++;
   break;
   
   case 5:
    five++;
   break;
   
   case 6:
    six++;
   break;
   
   case 7:
    seven++;
   break;
   
   case 8:
    eight++;
   break;
   
   case 9:
    nine++;
   break;
   
   }

   a/=10; // 利用整數會無條件捨去小數點的特性來拿掉已經挑出來的位數,並將其存回a變數
  }
  
  System.out.println("以下為各數字出現次數:");
  System.out.println("0的出現次數: "+zero);
  System.out.println("1的出現次數: "+one);
  System.out.println("2的出現次數: "+two);
  System.out.println("3的出現次數: "+three);
  System.out.println("4的出現次數: "+four);
  System.out.println("5的出現次數: "+five);
  System.out.println("6的出現次數: "+six);
  System.out.println("7的出現次數: "+seven);
  System.out.println("8的出現次數: "+eight);
  System.out.println("9的出現次數: "+nine);





沒有留言:

張貼留言

Layout疑難雜症筆記

 這裡記錄一些Layout時View元件比較特殊的狀況與處理方式,內容會陸續增加。