2010年7月28日 星期三

UVa 10013 Super long sums

解題策略

這題就是基本的大數加法,用一個長度1000000的字串來模擬加法。
由於題目有嚴格限制為M位數,所以字串頭可以直接放高位,省去一般大數反轉過來(str[0]放個位數)的麻煩。

注意

本題嚴格要求必須輸出M位數,即使有前導零也一樣: 例如M=6, 應輸出000123 而不僅僅是123。
每個輸出間都必須有一行空行間隔,這代表除了最後一個case,每個case後面都要多帶一個空行,算蠻常見的ACM格式要求。



2010年7月27日 星期二

UVa 10018 Reverse and Add

解題策略

這題是這樣的,要把輸入的數字反轉,例如1357變成7531,然後與原數相加。直到這個數字變成迴文(palindrome)為止,像是1357+7531=8888,8888就是一個迴文。本題只需要按照著要求計算即可,唯一比較技巧是反轉一個整數 int:reverse()

注意

需要注意變數範圍:至少要 unsigned long 才能容納題目的數字範圍。而printf()、scanf() 與 unsigned long 打交道的代號是%lu。

爭議點

這題有個爭議點是第一個數字到底需不需要判斷回文,舉個例子:
輸入2,那麼該輸出0 2或者1 4?舊版的UVa測資要求必須要輸出1 4,這有些不合常理,新版則是把爭議性測資都拿掉了,所以兩種寫法都能AC。但是在zerojudge.tw上就必須輸出1 4才行。

PS.這題我不小心把某個unsigned long打成int,抓了好久的bug。