【数据结构与算法】数组应用4:多项式计算Java版

简介:

    这里讨论的是多项的加法,直接看下面的程序代码:

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
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));
         
     }
}

    执行结果如下:

1
2
3
4
5
6
[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]




本文转自 xpleaf 51CTO博客,原文链接:http://blog.51cto.com/xpleaf/1976984,如需转载请自行联系原作者
相关文章
|
29天前
|
Java
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
25 0
|
1月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--希尔排序
数据结构与算法(Java篇)笔记--希尔排序
|
1月前
|
存储 Java
Java 编程实例:相加数字、计算单词数、字符串反转、元素求和、矩形面积及奇偶判断
Java中相加两个数字可通过简单赋值实现,如`int sum = x + y;`。若要用户输入数字相加,可使用`Scanner`类读取。计算单词数,可使用`split()`方法或`StringTokenizer`类。反转字符串,可用`for`循环或`StringBuilder`的`reverse()`方法。计算数组元素总和,可遍历数组累加。矩形面积通过长度乘以宽度得出。判断奇偶性,利用模2运算或位运算检查最低位。更多内容,可关注微信公众号`Let us Coding`。
49 0
|
28天前
|
存储 算法 Java
Java数据结构与算法-java数据结构与算法(二)
Java数据结构与算法-java数据结构与算法
78 1
|
12天前
|
算法
算法系列--两个数组的dp问题(2)(下)
算法系列--两个数组的dp问题(2)(下)
18 0
|
12天前
|
存储 算法
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)(下)
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)
16 0
|
12天前
|
算法
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)(上)
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)
21 0
|
12天前
|
算法 计算机视觉
算法系列--两个数组的dp问题(1)(下)
算法系列--两个数组的dp问题(1)
18 0
|
12天前
|
算法
算法系列--两个数组的dp问题(1)(上)
算法系列--两个数组的dp问题(1)
14 0
|
28天前
|
XML 存储 算法
Java数据结构与算法-java数据结构与算法(五)
Java数据结构与算法-java数据结构与算法
48 0