// 02-线性结构2 一元多项式的乘法与加法运算
import java.util.Scanner;
class Node{
int xishu;
int zhishu;
Node next;
Node(int x, int y){
xishu = x;
zhishu = y;
}
Node(){
this.next = null;
}
void add(int x, int y) {
Node newnode = new Node(x, y);
if(this.xishu == 0) {
this.xishu = x;
this.zhishu = y;
}
else if(this.next == null) {
this.next = newnode;
}
else {
this.next.add(x, y);
}
}
}
public class Main{
static void print(Node n) {
if(n.xishu == 0) {
System.out.print("0 0");
}
else {
while(n.next != null) {
if(n.xishu != 0) {
if(n.next.xishu != 0) {
System.out.print(n.xishu);
System.out.print(" ");
System.out.print(n.zhishu);
System.out.print(" ");
n = n.next;
}
else {
System.out.print(n.xishu);
System.out.print(" ");
System.out.print(n.zhishu);
n = n.next;
}
}
else{
n = n.next;
}
}
if(n.xishu != 0) {
System.out.print(n.xishu);
System.out.print(" ");
System.out.print(n.zhishu);
}
}
}
static void print(int[] a) {
for(int i = 0; i < a.length; i++) {
System.out.print(a[i]);
System.out.print(" ");
}
}
static void multiple(Node l1, Node l2) {
Node L = new Node();
Node a = L;
Node b = l2;
if(l1 != null) {
while(l2 != null) {
L.add(l1.xishu * l2.xishu, l1.zhishu + l2.zhishu);
l2 = l2.next;
}
l1 = l1.next;
}
//Node a = L;
while(l1 != null) {
l2 = b;
while(l2 != null) {
L = a;
int xs = l1.xishu * l2.xishu;
int zs = l1.zhishu + l2.zhishu;
while(L.next != null) {
if(L.zhishu == zs) {
L.xishu += xs;
break;
}
else if(L.next.zhishu < zs){
Node newnode = new Node(xs, zs);
newnode.next = L.next;
L.next = newnode;
break;
}
L = L.next;
}
if(L.next == null) {
if(L.zhishu == zs) {
L.xishu += xs;
}
else{
L.add(xs, zs);
}
}
l2 = l2.next;
}
l1 = l1.next;
}
print(a);
}
static void sum(Node l1, Node l2) {
Node L = new Node();
while(l1 != null && l2 != null) {
if(l1.zhishu > l2.zhishu) {
L.add(l1.xishu, l1.zhishu);
l1 = l1.next;
}
else if(l1.zhishu < l2.zhishu) {
L.add(l2.xishu, l2.zhishu);
l2 = l2.next;
}
else {
L.add(l1.xishu + l2.xishu, l1.zhishu);
l1 = l1.next;
l2 = l2.next;
}
}
if(l1 == null) {
while(l2 != null) {
L.add(l2.xishu, l2.zhishu);
l2 = l2.next;
}
}
else if(l2 == null) {
while(l1 != null) {
L.add(l1.xishu, l1.zhishu);
l1 = l1.next;
}
}
print(L);
}
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
int a = 0;
if(s.hasNextInt()) {
a = s.nextInt();
}
int[] A = new int[2*a];
if(s.hasNextInt()) {
for(int i = 0; i < 2*a; i++) {
A[i] = s.nextInt();
}
}
Node list1 = new Node();
for(int i = 0; i < a; i ++) {
list1.add(A[2*i], A[2*i + 1]);
}
int b = 0;
if(s.hasNextInt()) {
b = s.nextInt();
}
int[] B = new int[2*b];
if(s.hasNextInt()) {
for(int i = 0; i < 2*b; i++) {
B[i] = s.nextInt();
}
}
Node list2 = new Node();
for(int i = 0; i < b; i ++) {
list2.add(B[2*i], B[2*i + 1]);
}
/*print(A);
System.out.println();
print(B);
System.out.println();
print(list1);
System.out.println();
print(list2);
System.out.println();*/
multiple(list1, list2);
System.out.println();
sum(list1, list2);
}
}
02-线性结构2 一元多项式的乘法与加法运算
最新推荐文章于 2021-08-14 11:06:25 发布