设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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
测试用例:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
int a; //系数
int b; //指数
public Main(){}
public Main(int a, int b){
this.a=a;
this.b=b;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int num1=sc.nextInt();
Main[] A=new Main[num1];
for (int i = 0; i < num1; i++) { //初始化类数组
A[i]=new Main();
}
for (int i = 0; i < num1; i++) { //读取各个多项式
A[i].a=sc.nextInt();
A[i].b=sc.nextInt();
}
int num2=sc.nextInt();
Main[] B=new Main[num2];
for (int i = 0; i < num2; i++) {
B[i]=new Main();
}
for (int i = 0; i < num2; i++) {
B[i].a=sc.nextInt();
B[i].b=sc.nextInt();
}
ArrayList<Main> list1=Cheng(A, B); //cheng函数用来计算多项式乘法
for (int i = 0; i < list1.size(); i++) { //格式化输出
if(i!=list1.size()-1){
System.out.print(list1.get(i).a+" "+list1.get(i).b+" ");
}else{
System.out.print(list1.get(i).a+" "+list1.get(i).b);
}
}
System.out.println();
ArrayList<Main> list2=Jia(A, B);
for (int i = 0; i < list2.size(); i++) {
if(i!=list2.size()-1)
System.out.print(list2.get(i).a+" "+list2.get(i).b+" ");
else
System.out.print(list2.get(i).a+" "+list2.get(i).b);
}
}
private static ArrayList<Main> Cheng(Main[] A, Main[] B) {
ArrayList<Main> list=new ArrayList<>();
if(A.length==0||B.length==0){
list.add(new Main(0,0));
return list;
}
for (int i = 0; i < A.length; i++) {
for (int j = 0; j < B.length; j++) {
list.add(new Main(A[i].a*B[j].a,A[i].b+B[j].b));
}
}
Collections.sort(list, new Comparator<Main>() { //按指数下降形式排序
@Override
public int compare(Main o1, Main o2) {
return o2.b-o1.b;
}
});
for (int i = 0; i < list.size(); i++) {
for (int j = i+1; j < list.size(); j++) {
if(list.get(i).b==list.get(j).b){
list.set(i,new Main(list.get(i).a+list.get(j).a,list.get(i).b));
list.remove(j);
}
}
if(list.get(i).a==0){
list.remove(i);
}
}
return list;
}
private static ArrayList<Main> Jia(Main[] A, Main[] B) {
int a=0;
int b=0;
ArrayList<Main> list=new ArrayList<>();
while(a<A.length&&b<B.length){
if(A[a].b==B[b].b){
list.add(new Main(A[a].a+B[b++].a,A[a++].b));
}else if(A[a].b<B[b].b){
list.add(B[b++]);
}else {
list.add(A[a++]);
}
}
if(a==A.length){
while(b<B.length){
list.add(B[b++]);
}
}else{
while(a<A.length){
list.add(A[a++]);
}
}
for (int i = 0; i < list.size(); i++) {
if(list.get(i).a==0)
{
list.remove(i);
}
}
return list;
}
}