7-1 一元多项式的乘法与加法运算(Java实现)PTA

该篇文章介绍了如何使用Java编程语言实现一元多项式的乘法和加法,通过ArrayList结构存储多项式的系数和指数,并展示了计算过程中的关键方法和步骤。
摘要由CSDN通过智能技术生成

设计函数分别求两个一元多项式的乘积与和。

输入格式:

输入分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

各种的说明我都在代码里加了注解,正文我就不多说了,直接去代码里看就行哦

一杯茶,一包奶,一段代码写一天!

一盏灯,一双手,一个bug敲一宿!

加油程序猿!!!

import java.util.*;
//一元多项式的乘法与加法
public class Main {
    //创建两个多项式,用数组保存
   static ArrayList<list> list1=new ArrayList<>();
  static   ArrayList<list> list2=new ArrayList<>();
    static ArrayList<list> list3=new ArrayList<>();//用于保存最开始的list1数据
    static   ArrayList<list> list4=new ArrayList<>();//用于保存最开始的list2数据
    static   ArrayList<list> list5=new ArrayList<>();//用于保存list3与list4相乘结果
   static Scanner sc=new Scanner(System.in);
    public static void main(String[] args) {
Main m=new Main();
      int firstlist=sc.nextInt();//获取第一个多项式项数
     list1= m.first(firstlist);
     list3=list1;
        int secondlist=sc.nextInt();//获取第二个多项式项数
      list2=  m.first(secondlist);
      list4=list2;

        m.powmethod(list3,list4);
        m.maxmethod(list1,list2);

        for (int i = 0; i < list5.size(); i++) { //遍历list5数组,去除尾部空格
            if (i==list5.size()-1)
                System.out.println(list5.get(i));
            else System.out.print(list5.get(i)+" ");
        }
        if (list5.isEmpty())//如果为空

            System.out.println("0 0");
        for (int i = 0; i < list1.size(); i++) { //遍历list1数组,去除尾部空格

                if (i == list1.size() - 1)
                    System.out.print(list1.get(i));
                else System.out.print(list1.get(i) + " ");
            }

if (list1.isEmpty())//如果为空

    System.out.print("0 0");
        }
    /*数据初始化*/
       ArrayList<list> first(int a){//初始化数据
           ArrayList<list> arr=new ArrayList<>();
            for (int i = 0; i < a; i++) {
                int xishu=sc.nextInt();
                int zhishu=sc.nextInt();
                list l=new list(xishu,zhishu);
                arr.add(l);//将多项式对象l存入数组中
            }
            if (a==0){//如果多项式为0项,则初始化0
                list l=new list(0,0);
                arr.add(l);
            }

            return arr;
        }
    /*下面方法为相加方法*/
    void maxmethod(ArrayList<list> l1,ArrayList<list> l2){
        int a=0,b=0;//
        for (int i1 = 0; i1 < l2.size(); i1++) {//遍历两个数组,逐项对比,list1为母体
        for (int i = 0; i < l1.size(); i++) {

               if (l1.get(i).zhishu>l2.get(i1).zhishu){
//无需操作,list1元素后移
               }
               else if(l1.get(i).zhishu<l2.get(i1).zhishu){
                   //将list2插入到list1中list1元素的前边
                   if (l1.get(i).xishu==0)
                       l1.remove(i);
                  l1.add(i,l2.get(i1));
                   break;
               }
               else if(l1.get(i).zhishu==l2.get(i1).zhishu){
                   if (l1.get(i).xishu+l2.get(i1).xishu==0){//系数相加为0,则去除
                       l1.remove(i);
                       break;
                   }
                   list l=new list(l1.get(i).xishu+l2.get(i1).xishu,l2.get(i1).zhishu);
                   //系数相加,指数不变,将新的list替换list1中list1元素
                 l1.set(i,l);
                   break;
               }

            }
        }
    }
    /*下面方法为相乘方法*/
    void powmethod(ArrayList<list> l3,ArrayList<list> l4){
        for (int i = 0; i < l3.size(); i++) {
            for (int i1 = 0; i1 < l4.size(); i1++) {
                //两个多项式逐个相乘,系数相乘,指数相加
                list l=new list(l3.get(i).xishu*l4.get(i1).xishu,l3.get(i).zhishu+l4.get(i1).zhishu);
                if (l3.get(i).xishu*l4.get(i1).xishu==0){
                    l.zhishu=0;l.xishu=0;
                }
              list5.add(l);
            }
        }
        list5.sort(new Comparator<list>() {//排序方法,从大到小排序
            @Override
            public int compare(list o1, list o2) {
                return o2.zhishu-o1.zhishu;
            }
        });

        for (int i = 0; i < list5.size()-1; i++) {//将排好序的list5进行指数去重,系数相加

            if (list5.get(i).zhishu==list5.get(i+1).zhishu){//指数相同则进行去重
                if (list5.get(i).xishu+list5.get(i+1).xishu==0){//系数相加为0,则两个项都去除
                    list5.remove(i);
                    list5.remove(i);//删除i位后,i+1位占据i的位置,所以还是删除i位


                }
                else {
                    list5.get(i).xishu = list5.get(i).xishu + list5.get(i + 1).xishu;
                    list5.remove(i + 1);
                }
            }

        }
    }
    }
    class list{
    /*创建多项式对象,便于储存多项式信息*/
        int xishu=0;
        int zhishu=0;

        public list(int xishu, int zhishu) {
            this.xishu = xishu;
            this.zhishu = zhishu;
        }

        @Override
        public String toString() {//重写toString,便于结果打印
            return xishu+" "+zhishu;
        }
    }

### 回答1: 一元多项式是指只有一个未知量的多项式。它的一般形式可以表示为: a_nx^n + a_{n-1}x^{n-1} + ... + a_1x + a_0 其中,a_n, a_{n-1}, ..., a_1, a_0是多项式的系数,n是多项式的次数,x是多项式的未知量。 一元多项式乘法运算可以使用分配律来实现,即将一个多项式的每一项依次乘以另一个多项式的每一项,再将得到的结果相加。例如: (2x^2 + 3x + 1) * (x^3 + 2x + 1) = 2x^5 + 7x^4 + 8x^3 + 7x^2 + 5x + 1 一元多项式加法运算则是将同次数的项相加,不同次数的项直接并列。例如: (2x^2 + 3x + 1) + (x^3 + 2x + 1) = x^3 + 2x^2 + 5x + 2 在进行多项式的加法和乘法运算时,需要注意对齐同次数的项,以确保结果的正确性。 ### 回答2: 一元多项式乘法运算是指将两个或多个一元多项式相乘得到一个新的一元多项式。对于一元多项式乘法,我们需要使用分配律和结合律进行运算。以两个一元多项式f(x)和g(x)相乘为例,其结果可以表示为: f(x)×g(x) = ∑i=0n ∑j=0m ai bj x(i+j) 其中,ai和bj分别表示f(x)和g(x)的系数,n和m分别表示f(x)和g(x)的次数。 在一元多项式加法运算中,我们将同次项的系数相加,只有一样的项才能相加。例如,对于一元多项式f(x)和g(x),他们的加法运算可以表示为: f(x) + g(x) = ∑i=0n (ai + bi)x(i) 其中,ai和bi分别表示f(x)和g(x)在次数i的系数,n为f(x)和g(x)中最高次的次数。 在一元多项式的加法和乘法运算中,我们需要注意几点: 首先是运算顺序。在一元多项式乘法运算中,我们需要注意先进行乘法计算,再进行加法计算。在一元多项式加法运算中,我们需要先将同次项相加,然后再将不同的项按照次数从高到低排列。 其次是系数的约束。在一元多项式乘法运算中,系数的乘积需要满足乘法运算中的乘积约束。在一元多项式加法运算中,我们需要将同次项的系数相加,但是系数的大小和符号可能会影响结果的准确性。 最后,我们需要注意最高次项的系数。在一元多项式乘法加法运算中,最高次项的系数可能会决定运算结果的大小和符号。因此,在计算过程中,我们需要注意保持最高次项的系数正确。 ### 回答3: 一元多项式乘法运算是指将两个或多个一元多项式相乘的运算,而加法运算是将两个或多个一元多项式相加的运算。 对于一元多项式加法运算而言,我们只需要将相同次数的项进行相加,不同次数的项则保留原样。例如,若有两个一元多项式f(x)和g(x),其中f(x)=3x^2+2x+1,g(x)=x^2+4x+3,则它们的加法结果为f(x)+g(x)=4x^2+6x+4。 对于一元多项式乘法运算而言,我们需要将每个多项式的每一项依次相乘,并将相同次数的项相加得到一个新的多项式。例如,同样的f(x)和g(x)相乘: \begin{align} f(x) \times g(x) &= (3x^2+2x+1) \times (x^2+4x+3) \\ &= 3x^4 + 14x^3 + 17x^2 + 10x + 3 \end{align} 需要注意的是,在乘法运算中,我们可以使用分配律、结合律和交换律来简化计算。例如,上述乘法运算中,我们可以分别将f(x)中的每一项和g(x)中的每一项相乘,然后再相加,也可以将f(x)和g(x)展开后再相乘,最后再将同次幂的项相加。这些简化计算的方法可以根据具体情况选择使用。 同时,需要注意的是,在乘法运算中,我们要特别留意同次幂的项相加。有时候我们需要合并同次幂的项,有时候我们又需要保留它们独立。这些都需要根据具体情况进行决策。 总之,一元多项式乘法加法运算是代数学中非常基础的概念。深入理解这些概念对于我们学习更高级的代数知识和解决实际问题都有很大的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值