這裡讨論的是多項的加法,直接看下面的程式代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<code>package</code> <code>chapter02;</code>
<code>import</code> <code>java.util.Arrays;</code>
<code>/*</code>
<code> </code><code>* 多項式加法(簡單版)</code>
<code> </code><code>* A(x) = 2x^5 + 3x^4 + 0x^3 + 5x^2 + 4x^1 +1x^0</code>
<code> </code><code>* B(x) = 3x^4 + 2x^3 + 1x^2 + 1x^1 + 2x^0</code>
<code> </code><code>* </code>
<code> </code><code>* A(x) + B(x) = </code>
<code> </code><code>* C(x) = 2x^5 + 6x^5 + 2x^3 + 6x^2 + 5x^1 + 3x^0</code>
<code> </code><code>* 采用一維數組儲存,第一個元素儲存多項式的最高次幂,後面依次儲存每項的次數</code>
<code> </code><code>* A(x) = [5, 2, 3, 0, 5, 4, 1]</code>
<code> </code><code>* B(x) = [3, 2, 1, 1, 2, 2]</code>
<code> </code><code>* A(x) + B(x) =</code>
<code> </code><code>* C(x) = [5, 2, 5, 1, 6, 6, 3]</code>
<code> </code><code>*/</code>
<code>public</code> <code>class</code> <code>CH02_08 {</code>
<code> </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>
<code> </code><code>//定義兩個多項式的數組</code>
<code> </code><code>int</code><code>[] arr1 = {</code><code>5</code><code>, </code><code>2</code><code>, </code><code>3</code><code>, </code><code>0</code><code>, </code><code>5</code><code>, </code><code>4</code><code>, </code><code>1</code><code>};</code>
<code> </code><code>int</code><code>[] arr2 = {</code><code>3</code><code>, </code><code>2</code><code>, </code><code>1</code><code>, </code><code>1</code><code>, </code><code>2</code><code>, </code><code>2</code><code>};</code>
<code> </code>
<code> </code><code>//輸出兩個多項式數組</code>
<code> </code><code>System.out.println(Arrays.toString(arr1));</code>
<code> </code><code>System.out.println(Arrays.toString(arr2));</code>
<code> </code><code>//定義結果多項式的數組</code>
<code> </code><code>int</code> <code>arrResultLen = arr1.length > arr2.length ? arr1.length:arr2.length; </code><code>//數組長度為擁有較多項的多項式的數組的長度</code>
<code> </code><code>int</code><code>[] arrResult = </code><code>new</code> <code>int</code><code>[arrResultLen];</code>
<code> </code><code>//初始化arrResult</code>
<code> </code><code>Arrays.fill(arrResult, </code><code>0</code><code>);</code>
<code> </code><code>//輸出arrResult</code>
<code> </code><code>System.out.println();</code>
<code> </code><code>System.out.println(Arrays.toString(arrResult));</code>
<code> </code><code>//開始計算多項式的加法</code>
<code> </code><code>int</code><code>[] bigArr = arr1.length == arrResultLen ? arr1:arr2; </code><code>//找出項較多的多項式數組</code>
<code> </code><code>int</code><code>[] smallArr = arr1.length == arrResultLen ? arr2:arr1; </code><code>//找出項較少的多項式數組</code>
<code> </code><code>for</code><code>(</code><code>int</code> <code>bigLen = bigArr.length - </code><code>1</code><code>, smallLen = smallArr.length - </code><code>1</code><code>; bigLen >= </code><code>0</code><code>; bigLen--, smallLen--){</code>
<code> </code><code>//逆序數組進行計算,這樣就可以實作項的幂一一對應</code>
<code> </code><code>if</code><code>(smallLen > </code><code>0</code><code>){</code>
<code> </code><code>//小的多項式數組的第0項隻是表示最高次幂,對實際計算沒有用處,這裡隻計算小的多項式數組第0項之後的值</code>
<code> </code><code>arrResult[bigLen] = bigArr[bigLen] + smallArr[smallLen];</code>
<code> </code><code>} </code><code>else</code> <code>{</code>
<code> </code><code>//再往前走,如果smallArr已經到達了第0項,則隻把bigArr中相應的值直接儲存到arrResult中</code>
<code> </code><code>arrResult[bigLen] = bigArr[bigLen];</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code><code>//輸出結果多項式的數組</code>
<code> </code><code>}</code>
<code>}</code>
執行結果如下:
<code>[5, 2, 3, 0, 5, 4, 1]</code>
<code>[3, 2, 1, 1, 2, 2]</code>
<code>[0, 0, 0, 0, 0, 0, 0]</code>
<code>[5, 2, 5, 1, 6, 6, 3]</code>
<code></code>
本文轉自 xpleaf 51CTO部落格,原文連結:http://blog.51cto.com/xpleaf/1976984,如需轉載請自行聯系原作者