这里讨论的是多项的加法,直接看下面的程序代码:
package chapter02;import java.util.Arrays;/* * 多项式加法(简单版) * A(x) = 2x^5 + 3x^4 + 0x^3 + 5x^2 + 4x^1 +1x^0 * B(x) = 3x^4 + 2x^3 + 1x^2 + 1x^1 + 2x^0 * * A(x) + B(x) = * C(x) = 2x^5 + 6x^5 + 2x^3 + 6x^2 + 5x^1 + 3x^0 * * 采用一维数组保存,第一个元素保存多项式的最高次幂,后面依次保存每项的次数 * A(x) = [5, 2, 3, 0, 5, 4, 1] * B(x) = [3, 2, 1, 1, 2, 2] * A(x) + B(x) = * C(x) = [5, 2, 5, 1, 6, 6, 3] * */public class CH02_08 { public static void main(String[] args) { //定义两个多项式的数组 int[] arr1 = {5, 2, 3, 0, 5, 4, 1}; int[] arr2 = {3, 2, 1, 1, 2, 2}; //输出两个多项式数组 System.out.println(Arrays.toString(arr1)); System.out.println(Arrays.toString(arr2)); //定义结果多项式的数组 int arrResultLen = arr1.length > arr2.length ? arr1.length:arr2.length; //数组长度为拥有较多项的多项式的数组的长度 int[] arrResult = new int[arrResultLen]; //初始化arrResult Arrays.fill(arrResult, 0); //输出arrResult System.out.println(); System.out.println(Arrays.toString(arrResult)); //开始计算多项式的加法 int[] bigArr = arr1.length == arrResultLen ? arr1:arr2; //找出项较多的多项式数组 int[] smallArr = arr1.length == arrResultLen ? arr2:arr1; //找出项较少的多项式数组 for(int bigLen = bigArr.length - 1, smallLen = smallArr.length - 1; bigLen >= 0; bigLen--, smallLen--){ //逆序数组进行计算,这样就可以实现项的幂一一对应 if(smallLen > 0){ //小的多项式数组的第0项只是表示最高次幂,对实际计算没有用处,这里只计算小的多项式数组第0项之后的值 arrResult[bigLen] = bigArr[bigLen] + smallArr[smallLen]; } else { //再往前走,如果smallArr已经到达了第0项,则只把bigArr中相应的值直接保存到arrResult中 arrResult[bigLen] = bigArr[bigLen]; } } //输出结果多项式的数组 System.out.println(); System.out.println(Arrays.toString(arrResult)); }}
执行结果如下:
[5, 2, 3, 0, 5, 4, 1][3, 2, 1, 1, 2, 2][0, 0, 0, 0, 0, 0, 0][5, 2, 5, 1, 6, 6, 3]