切換
舊版
前往
大廳
主題

ZeroJudge - e628: 10494 - If We Were a Child Again 解題心得

Not In My Back Yard | 2020-01-31 00:20:44 | 巴幣 0 | 人氣 109

題目連結:


題目大意:
給定一正整數 m 、一個運算符號(「/」或是「%」,依序代表整數除法以及取餘數)以及一正整數 n (m 的大小無限制,而 n < 2 ^ 31)。請輸出運算式的結果。



範例輸入:
110 / 100
99 % 10
2147483647 / 2147483647
2147483646 % 2147483647


範例輸出:
1
9
1
2147483646


解題思維:
要寫大數對於整數的除法以及取餘數。

以前的文章有提過儲存一個很大的數,可以將該數分成好幾部分並分別存在陣列的連續位置之中。例如將 1023 拆為 10 、 23 ,每個陣列位置能存的值為 0 ~ 99 。

因此除法以及取餘數(即為「模」)便可以分別對每一個位置分別處理(因為除數 n 不會是很大的數,都是 int 可以儲存的範圍之內)。

例如 1023 拆成 10 、 23 並除以 3 ,則是先將 10 除以 3 得 3 餘 1 ,然後將該餘數乘以 100 (因為拆分的單位為 100 進位)並加上 23 得 123 。 123 再除以 3 得 41 餘 0 。而最後陣列的內容為 3 、 41 ,所以答案為 341 。如果是取餘的話,則只需要關注最後的餘數即可。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作