[算法/java]多项式运算

您所在的位置:网站首页 设计一个一元多项式类 [算法/java]多项式运算

[算法/java]多项式运算

2024-07-11 19:27| 来源: 网络整理| 查看: 265

问题描述

给两个多项式 例如 p1: 3x^3+2x^2+x+1 p2: x^2+x+1 给出p1和p2的加减乘除四则运算的结果

前要知识

List类、Set类、Map和HashMap

算法描述

对于多项式来说,一个多项式可以分成多个单元相加(减),(3x^3)+(2x^2)+(x)+(1)对于每个单元(3x^3),(2x^2),(x)和(1)我们可以用List结构来存储,而对于符号位+,+,+同样可以用List结构存储。而对于整个多项式,可以用一个类进行表达。 当然,对于整体性来说,我们希望看到的是每一个自变量的指数和系数存储在一个数据结构中,因此引入含有Key主键的HashMap存储指数和系数。key值为指数,value值为系数。

//类Polynomial 的基本信息 public static class Polynomial { List symbolList = new LinkedList(); //用于记录 + - 符号 List specPolynomial = new LinkedList(); //用于记录分割多项式后的部分 Map powerAndCoefficient = new HashMap(); //power幂 coefficient系数 hashmap存储 } 具体描述 1.构造函数

因为我们输入的是String字符串,为了方便起见,需要将String字符串构造为Polynomial类型,代码如下:

Polynomial(String string) { //多项式的构造函数 int left = 0, right = 0; while (left < string.length() - 1 && right < string.length()) { //当左边到达最后一位 或 右边超出string位数时结束循环 if (string.charAt(right) == '+' || string.charAt(right) == '-') { //如果是加号或减号 前面left到right就是分割后的部分 right位置就是符号位 specPolynomial.add(string.substring(left, right)); //将分割后的部分加入到specPolynomial 列表中 left = right + 1; symbolList.add(string.charAt(right)); //将符号加入symbol 列表中 } right++; //继续循环 } specPolynomial.add(string.substring(left)); //将最后一段加入specPolynomial 列表中 for (int j = 0; j < specPolynomial.size(); j++) { //遍历specPolynomial 取出每一个元素 String temp = specPolynomial.get(j); char symbol = '+'; //定义一个symbol if (j > 0) symbol = symbolList.get(j - 1); //symbol的值为symbolList列表中的前一位 int mul = 1; if (symbol == '+') //如果symbol为正号 则mul为1 即为原值 mul = 1; else //如果symbol为负号 则mul为-1 即为相反值 mul = -1; boolean notHasX = true; //判定有无x for (int i = 0; i < temp.length(); i++) { if (temp.charAt(i) == 'x') { //如果查询到x notHasX置为否 notHasX = false; break; } } if (notHasX) { //当没有x时,即常系数 powerAndCoefficient.


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3