CPE 10460、UVA 10929程式解題。
解題觀念:
恩。判斷11的倍數大家都會。大多分成兩派的解法:
1.奇位數總和減掉偶為數總和=0 or 11的倍數。
2.直接取11的餘數看是否為0。
在題目中還有一個比較麻煩的限制就是數字位數最多到1000 digits!!
因此絕大多數人尤其是C語言,有90%的人都是用陣列解,如果用陣列解的話,其使用的解法有90%都是用上面第一種方法。
但JAVA有一個很好用的工具-BigInteger。是專門來處理這種大位數的數字。如果是用JAVA寫,就可以省掉許多步驟,使用第二種解法直接取餘數去判斷。
(所以如果如果不太懂大數運算,要先去熟悉一下BigInteger的用法喔!!)
這題還有一個心機測資要通過就是...00011。要記得去處理開頭為0的測資喔!!
如果直接將數字印出,00011會直接變成11,但依題目要求是要完整印出00011,所以如何解呢??
解題過程:
宣告字串ans,存放完整的數字。
宣告大數a,將字串轉為整數做計算。
宣告大數b,將大數a取餘數存放到b。
if判斷式,如果輸入字串為0則測資結束;如果不是就進入11倍數判斷。
(**BigInteger.ZERO = 0。)
EX:
112233。先存放到字串ans,之後轉換成a=112233,宣告b去存放a取11的餘數,b=0。
進入if判斷式,符合b=0,印出。
112234。先存放到字串ans,之後轉換成a=112234,宣告b去存放a取11的餘數,b=1。
進入if判斷式,不符合b=0,進入else印出。
BY 小K
沒有留言:
張貼留言