您的位置:首页 > 其它

02-线性结构2 一元多项式的乘法与加法运算 (20分)

2016-10-07 19:54 471 查看
设计函数分别求两个一元多项式的乘积与和。

输入格式:

输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式:

输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出
0 0


输入样例:

4 3 4 -5 2  6 1  -2 0
3 5 20  -7 4  3 1

输出样例:

15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0


AC代码:

import java.util.Scanner;

class Node{
Node next;
int value;
int exp;
public Node(int value,int exp){
this.value = value;
this.exp = exp;
}
public void add(int value,int exp){
if(this.next==null){
this.next = new Node(value,exp);
}else{
this.next.add(value, exp);
}
}
}
public class Main {

/**
* 加法运算
* @param p1
* @param p2
* @return
*/
public static Node funjia(Node p1,Node p2){
int value = 0,exp = 0;
Node p3 = null;
while(p1!=null&&p2!=null){
if(p1.exp>p2.exp){
if(p3==null){
p3 = new Node(p1.value, p1.exp);
}else{
p3.add(p1.value, p1.exp);
}
p1 = p1.next;
}else if(p1.exp<p2.exp){
if(p3==null){
p3 = new Node(p2.value, p2.exp);
}else{
p3.add(p2.value, p2.exp);
}
p2 = p2.next;
}else if(p1.exp==p2.exp){
if(p1.value+p2.value==0){
value = 0;
exp = 0;
}else{
value = p1.value+p2.value;
exp = p1.exp;
}
if(p3==null){
p3 = new Node(value, exp);
}else{
p3.add(value, exp);
}
p1 = p1.next;
p2 = p2.next;
}
}

while(p1!=null){
if(p3==null){
p3 = new Node(p1.value, p1.exp);
}else{
p3.add(p1.value, p1.exp);
}
p1 = p1.next;
}

while(p2!=null){
if(p3==null){
p3 = new Node(p2.value, p2.exp);
}else{
p3.add(p2.value, p2.exp);
}
p2 = p2.next;
}
return p3;
}

/**
* 打印加法运算的结果
* @param p
*/
public static void print(Node p){
int i = 0;
if(p.value==0){
System.out.println("0 0");
}else{
while(p!=null){
if(p.value!=0){
System.out.print(p.value+" "+p.exp);
}
p = p.next;
if(p!=null){
if(p.value!=0)
System.out.print(" ");
}
}
System.out.println();
}
}

/**
* 乘法运算
* @param p1
* @param p2
*/
public static Node mult(Node p1,Node p2){
int value=0,exp=0;
Node temp = p2;
Node p = null,p3 = null;
int i = 1;
while(p1!=null){
while(p2!=null){
if(i==1){
if(p1.value*p2.value==0){
value = 0;
exp = 0;
}else{
value = p1.value*p2.value;
exp = p1.exp+p2.exp;
}
if(p == null){
p = new Node(value,exp);
}else{
p.add(value,exp);
}
}else{
if(p3 == null){
p3 = new Node(p1.value*p2.value,p1.exp+p2.exp);
}else{
p3.add(p1.value*p2.value,p1.exp+p2.exp);
}
}
p2 = p2.next;
}
i=2;
p = funjia(p,p3);
p1 = p1.next;
p2 = temp;
p3 = null;
}
return p;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
Node p1=null,p2=null;
int T1 = scan.nextInt();
int temp1 = T1;
while(T1--!=0){
int value = scan.nextInt();
int exp = scan.nextInt();
if(p1==null){
p1 = new Node(value,exp);
}else{
p1.add(value, exp);
}
}

int T2 = scan.nextInt();
int temp2 = T2;
if(T2==0){
p2 = new Node(0,0);
}
while(T2--!=0){
int value = scan.nextInt();
int exp = scan.nextInt();
if(p2==null){
p2 = new Node(value,exp);
}else{
p2.add(value, exp);
}
}

if(temp1!=0&&temp2!=0){
Node p = mult(p1,p2);
print(p);
}else{
System.out.println("0 0");
}

Node p3 = funjia(p1,p2);
print(p3);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息