最大的麻煩是該怎麼把數字各別提出來做處理
題目:
試設定一個剛好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);
沒有留言:
張貼留言