生成两个多项式java,实现多项式的JAVA类

这是一个Java类,实现了多项式(Polynomial)的加法、减法、乘法和复合运算。类中包含系数数组和多项式的度数,并提供了计算多项式度、相等性检查以及使用Horner's方法计算值等功能。示例代码展示了如何创建和操作多项式对象。
摘要由CSDN通过智能技术生成

1 package practice;

2 //http://introcs.cs.princeton.edu/java/92symbolic/Polynomial.java.html

3 /*************************************************************************

4  *  Compilation:  javac Polynomial.java

5  *  Execution:    java Polynomial

6  *

7  *  Polynomials with integer coefficients.

8  *

9  *  % java Polynomial

10  *  zero(x) =     0

11  *  p(x) =        4x^3 + 3x^2 + 2x + 1

12  *  q(x) =        3x^2 + 5

13  *  p(x) + q(x) = 4x^3 + 6x^2 + 2x + 6

14  *  p(x) * q(x) = 12x^5 + 9x^4 + 26x^3 + 18x^2 + 10x + 5

15  *  p(q(x))     = 108x^6 + 567x^4 + 996x^2 + 586

16  *  0 - p(x)    = -4x^3 - 3x^2 - 2x - 1

17  *  p(3)        = 142

18  *  p'(x)       = 12x^2 + 6x + 2

19  *  p''(x)      = 24x + 6

20  *

21  *************************************************************************/

22 public class Polynomial {

23     private int[] coef; //coefficients 系数

24     private int deg;//degree of polynomial (0 for the zero polynomial)

25

26     //a*x^b

27     public Polynomial(int a, int b){

28         coef = new int[b+1];

29         coef[b] = a;

30         deg = degree();

31     }

32

33     // return the degree of this polynomial (0 for the zero polynomial)

34     public int degree(){

35         int d = 0;

36         for(int i = 0; i

37             if(coef[i]!=0)

38                 d = i;

39

40         return d;

41     }

42

43     //return c = a+b

44     public Polynomial plus(Polynomial b){

45         Polynomial a = this;

46         Polynomial c = new Polynomial(0, Math.max(a.deg, b.deg));

47         for(int i = 0; i <= a.deg; i++)

48             c.coef[i] += a.coef[i];

49         for(int i = 0; i <= b.deg; i++)

50             c.coef[i] += b.coef[i];

51         c.deg = c.degree();

52         return c;

53     }

54

55     // return (a - b)

56     public Polynomial minus(Polynomial b) {

57         Polynomial a = this;

58         Polynomial c = new Polynomial(0, Math.max(a.deg, b.deg));

59         for (int i = 0; i <= a.deg; i++) c.coef[i] += a.coef[i];

60         for (int i = 0; i <= b.deg; i++) c.coef[i] -= b.coef[i];

61         c.deg = c.degree();

62         return c;

63     }

64

65     // return (a * b)

66     public Polynomial times(Polynomial b) {

67         Polynomial a = this;

68         Polynomial c = new Polynomial(0, a.deg + b.deg);

69         for (int i = 0; i <= a.deg; i++)

70             for (int j = 0; j <= b.deg; j++)

71                 c.coef[i+j] += (a.coef[i] * b.coef[j]);

72         c.deg = c.degree();

73         return c;

74     }

75

76     // return a(b(x))  - compute using Horner's method

77     public Polynomial compose(Polynomial b) {

78         Polynomial a = this;

79         Polynomial c = new Polynomial(0, 0);

80         for (int i = a.deg; i >= 0; i--) {

81             Polynomial term = new Polynomial(a.coef[i], 0);

82             c = term.plus(b.times(c));

83         }

84         return c;

85     }

86

87

88     // do a and b represent the same polynomial?

89     public boolean eq(Polynomial b) {

90         Polynomial a = this;

91         if (a.deg != b.deg) return false;

92         for (int i = a.deg; i >= 0; i--)

93             if (a.coef[i] != b.coef[i]) return false;

94         return true;

95     }

96

97

98     // use Horner's method to compute and return the polynomial evaluated at x

99     public int evaluate(int x) {

int p = 0;

for (int i = deg; i >= 0; i--)

p = coef[i] + (x * p);

return p;

}

// differentiate this polynomial and return it

public Polynomial differentiate() {

if (deg == 0) return new Polynomial(0, 0);

Polynomial deriv = new Polynomial(0, deg - 1);

deriv.deg = deg - 1;

for (int i = 0; i 

deriv.coef[i] = (i + 1) * coef[i + 1];

return deriv;

}

public String toString(){

if(deg == 0)

return "" + coef[0];

if(deg == 1)

return coef[1] + "x + " + coef[0];

String s = coef[deg] + "x^" + deg;

for(int i = deg-1; i >= 0; i--){

if(coef[i] == 0)

continue;

else if(coef[i] > 0)

s = s + " + " + ( coef[i]);

else if(coef[i] 

s = s + " - " + (-coef[i]);

if(i== 1)

s = s + "x";

else if(i > 1)

s = s +"x^" + i;

}

return s;

}

public static void main(String[] args) {

Polynomial zero = new Polynomial(0, 0);

Polynomial p1   = new Polynomial(4, 3);

Polynomial p2   = new Polynomial(3, 2);

Polynomial p3   = new Polynomial(1, 0);

Polynomial p4   = new Polynomial(2, 1);

Polynomial p    = p1.plus(p2).plus(p3).plus(p4);   // 4x^3 + 3x^2 + 1

Polynomial q1   = new Polynomial(3, 2);

Polynomial q2   = new Polynomial(5, 0);

Polynomial q    = q1.plus(q2);                     // 3x^2 + 5

Polynomial r    = p.plus(q);

//        Polynomial s    = p.times(q);

//        Polynomial t    = p.compose(q);

System.out.println("zero(x) =     " + zero);

System.out.println("p(x) =        " + p);

System.out.println("q(x) =        " + q);

System.out.println("p(x) + q(x) = " + r);

//        System.out.println("p(x) * q(x) = " + s);

//        System.out.println("p(q(x))     = " + t);

//        System.out.println("0 - p(x)    = " + zero.minus(p));

//        System.out.println("p(3)        = " + p.evaluate(3));

//        System.out.println("p'(x)       = " + p.differentiate());

//        System.out.println("p''(x)      = " + p.differentiate().differentiate());

}

}

如何用Java类配置Spring MVC&lpar;不通过web&period;xml和XML方式&rpar;

DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置方式, XML看起来太累, 冗长繁琐. 还好借助于Servl ...

jvm系列&lpar;一&rpar;&colon;java类的加载机制

java类的加载机制 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装 ...

java类与实例

最近在看设计模式,感觉自己对java的三大特性的理解不够清晰,搞不清楚抽象类.接口.泛型的用处和优缺点.设计模式学了一半,想着还是停下来脑补一下java的基础,就从java对象开始吧. 一.java对 ...

oracle调用JAVA类的方法

导入jar包 在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了,  1.操作系统需要拥有支持loadjava命令的jdk.  2.加 ...

Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序

先看一道Java面试题: public class Baset { private String baseName = "base"; // 构造方法 public Baset() ...

hibernate中java类的成员变量类型如何映射到SQL中的数据类型变化

hibernate映射文件??.hbm.xml配置映射元素详解--Hibernate映射类型 在从Hibernate的java的成员类型映射到SQL中的数据类型,其内映射方式它满足,SQL可以自己调制 ...

kettle系列-&lbrack;KettleUtil&rsqb;kettle插件,类似kettle的自定义java类控件

该kettle插件功能类似kettle现有的定义java类插件,自定java类插件主要是支持在kettle中直接编写java代码实现自定特殊功能,而本控件主要是将自定义代码转移到jar包,就是说自定义 ...

Myeclipse中导入项目后java类中汉字注释出现乱码问题&lpar;已解决&rpar;

今天重装系统,安装了新的Myeclipse后,导入之前的项目后,,出现了乱码问题.乱码问题主要是java类中的注释,而jsp页面中汉字却完好如初: 右键项目,查看项目的编码格式,UTF-8,把java ...

Java类初始化

Java类初始化 成员变量的初始化和构造器 如果类的成员变量在定义时没有进行显示的初始化赋值,Java会给每个成员变量一个默认值 对于  char.short.byte.int.long.float. ...

随机推荐

windows下获取IP地址的两种方法

windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...

WPF学习之路(九)导航和页面(续)

生命周期 如果Page1成功导航到Page2,首先会触发NavigationService的Navigating事件,标识导航开始.随后创建Page2对象,并且触发NavigationProgress ...

jquery总结05-常用事件04-委托事件

委托事件on 多个事件绑定同一个函数 $("#elem").on("mouseover mouseout",function(){ });通过空格分离,传递不同 ...

Linux下可以替代windows的软件汇总:(不断完善中)

http://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=9530 原则:不求全面,只求实用.主要针对桌面级应用.网购:  ...

spring-aop示例

具体案例放在github上,主要是jar包在上面 https://github.com/guoyansi/spring-aop-example knights.xml <?xml version ...

UDID

大多数应用都会用到苹果设备的UDID号,UDID通常有以下两种用途: 1)用于一些统计与分析目的:[第三方统计工具如友盟,广告商如ADMOB等] 2)将UDID作为用户ID来唯一识别用户,省去用户名, ...

python3和Python2的区别(被坑太久了)

print函数:(Python3中print为一个函数,必须用括号括起来:Python2中print为class) Python 2 的 print 声明已经被 print() 函数取代了,这意味着我 ...

部署statspack工具(二)之解决方案2

解决方案二:在emp2的empno列上面创建索引,再执行share_pool_sql_1.sh脚本,查看sp报告 8.1在emp2的empno列上创建索引 sys@TESTDB12>create ...

KoaHub&period;js -- 基于 Koa&period;js 平台的 Node&period;js web 快速开发框架之koahub-skip

koahub-skip koahub skip middleware koahub skip Conditionally skip a middleware when a condition is m ...

SpringBootApplication注解 专题

到这里,看到所有的配置是借助SpringFactoriesLoader加载了META-INF/spring.factories文件里面所有符合条件的配置项的全路径名.找到spring-boot-aut ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值