展开全部
请把问题再描述清楚些,给定什么条件,想要什么结果?62616964757a686964616fe78988e69d8331333264626565
最好能举个例子。恐怕很多人对一元多项式对忘了差不多了。
程序已完成。两个类,一个类Node。封装多项式用的。一个计算用的。链表直接用java里面的ArraryList了,不用自己再写结构了。若不知道怎么运行java类,请补充问题。
效果如下:
请输第1个项多式以回车结束: 格式如:2^0+8^3+7^5+6^6+7^9
2^0+8^3+7^5+6^6+7^9
请输第2个项多式以回车结束:
3^6+4^3+5+2^8+6^2
=======以下为输出结果======
多项式1:2+8x^3+7x^5+6x^6+7x^9
多项式2:5+6x^2+4x^3+3x^6+2x^8
多项式和:7+6x^2+12x^3+7x^5+9x^6+2x^8+7x^9
程序如下:
文件 Node.java
public class Node implements Comparable{
private int xishu;//系数
private int zhishu; //指数
public int getXishu() {
return xishu;
}
public void setXishu(int xishu) {
this.xishu = xishu;
}
public int getZhishu() {
return zhishu;
}
public void setZhishu(int zhishu) {
this.zhishu = zhishu;
}
public Node(){
}
public Node(int a,int b){
xishu=a;
zhishu=b;
}
/**
* 通过指数来比较整个对象大小
*/
public int compareTo(Node node) {
return this.zhishu-node.zhishu;
}
/**
* 当 系统与指数都相等时,说明整个对象都相等.
*/
@Override
public boolean equals(Object o) {
Node node = (Node) o;
if(this.zhishu==node.zhishu&&this.xishu==node.xishu){
return true;
}else{
return false;
}
}
}
文件: Test.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
/**
* @author Youngao
* @Time 2011-03-18
* @Relue 多项式加法规则:对于两个多项式中指数相同的子项,其系数相加,若系数的和非零,
* 则构成“和多项式”中的一项;对于指数不同的项,直接构成“和多项式”中的一项。
*/
public class Test {
public static void main(String[] args) {
Scanner stdin = new Scanner(System.in);
System.out.println("请输第1个项多式以回车结束: 格式如:2^0+8^3+7^5+6^6+7^9");
String str1 = stdin.nextLine();
List list1 = splitStr(str1);
System.out.println("请输第2个项多式以回车结束: ");
String str2 = stdin.nextLine();
List list2 = splitStr(str2);
System.out.println("=======以下为输出结果======");
printPolyn("多项式1:",list1);
printPolyn("多项式2:",list2);
//相加
List newlist = AddPolyn(list1,list2);
printPolyn("多项式和:",newlist);
}
/**
* 两一元多项式相加
*/
private static List AddPolyn(List list1, List list2) {
List deletenode1 = new ArrayList();
List deletenode2 = new ArrayList();
List newlist = new ArrayList();
for(int i=0;i
Node list1node = list1.get(i);
for(int j=0;j
Node list2node = list2.get(j);
//凭规则 重新组装 '和结果'的链表
if(list1node.getZhishu()==list2node.getZhishu()){
Node newnode = new Node();
newnode.setXishu(list1node.getXishu()+list2node.getXishu());
newnode.setZhishu(list1node.getZhishu());
deletenode1.add(list1node);
deletenode2.add(list2node);
newlist.add(newnode);
break;
}
}
}
//去除已被求和的各项
list1.removeAll(deletenode1);
list2.removeAll(deletenode2);
//拼接剩余所有项
for(int i=0;i
Node list2node = list2.get(i);
if(!newlist.contains(list2node)){
newlist.add(list2node);
}
}
for(int i=0;i
Node list1node = list1.get(i);
if(!newlist.contains(list1node)){
newlist.add(list1node);
}
}
// 按指数从低到高排序
Collections.sort(newlist);
return newlist;
}
/**
* 统一的打印方法
*/
private static void printPolyn(String str, List list) {
String result = str;
for(int i=0;i
Node node = list.get(i);
if(i==list.size()-1){
if(node.getZhishu()==0){
result += node.getXishu()+"";
}else{
result += node.getXishu()+"x^"+node.getZhishu();
}
}else{
if(node.getZhishu()==0){
result += node.getXishu()+"+";
}else{
result += node.getXishu()+"x^"+node.getZhishu()+"+";
}
}
}
System.out.println(result);
}
/**
* 分割字符串,并封装键表
*/
private static List splitStr(String str1) {
String[] strs = str1.split("\\+");
List list = new ArrayList();
for (int i = 0; i < strs.length; i++) {
String[] subnode = strs[i].split("\\^");
int xishu = Integer.valueOf(subnode[0].trim());
int zhishu = 0;
if(subnode.length>1)
zhishu = Integer.valueOf(subnode[1].trim());
Node node = new Node(xishu,zhishu);
list.add(node);
}
// 按指数从低到高排序
Collections.sort(list);
return list;
}
}
本回答由提问者推荐
已赞过
已踩过<
你对这个回答的评价是?
评论
收起