2013年7月17日 星期三

[UVA]You can say 11.

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


沒有留言:

張貼留言