栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java实现多项式相加与相乘

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java实现多项式相加与相乘

import java.util.Arrays;
import java.util.Scanner;

//数组实现多项式相加和相乘,并输出
// 4 3 4 -5 2 6 1 -2 0
// 3 5 20 -7 4 3 1
//输出:15 24 -25 22 30...
//      3 5 20 -7 4 3 1

public class Main {
    public static void main(String[] args) {
        int[] arr1 = readData();
        int[] arr2 = readData();
        int[] c = dataMul(arr1,arr2);
        int[] d = dataAdd(arr1,arr2);
        printArr(c);
        System.out.println();
        printArr(d);
    }

    //两个多项式的相加,并返回结果
    private static int[] dataAdd(int[] a, int[] b) {
        int[] arr = new int[a.length+b.length-1];
        int l = a[0] + b[0];
        //两数组相同项的个数,指数相同+1,系数和指数都相同+2
        int same = 0;
        int p = 1;  //a数组的下标
        int q = 1;  //b数组的下标
        int k = 1;  //arr数组的下标

        while(2*p
            if(a[2*p] > b[2*q]){
                arr[2*k-1] = a[2*p-1];
                arr[2*k] = a[2*p];
                p++;
                k++;
            }else if(a[2*p] < b[2*q]){
                arr[2*k-1] = b[2*q-1];
                arr[2*k] = b[2*q];
                q++;
                k++;
            }else{
                //指数系数都相等的情况
                if(a[2*p-1] == b[2*q-1]){
                    p++;
                    q++;
                    k++;
                    same += 2;
                //指数相等系数不等的情况
                }else{
                    arr[2*k-1] = a[2*p-1] + b[2*q-1];
                    arr[2*k] = a[2*p];
                    k++;
                    p++;
                    q++;
                    same++;
                }
            }
        }
        //说明a数组已遍历完,把b数组未处理项添加到arr数组后面
        while (2*p > a.length && 2*q < b.length){
            for (; 2*q < b.length; q++) {
                arr[2*k-1] = b[2*q-1];
                arr[2*k] = b[2*q];
                k++;
            }
        }
        //说明b数组已遍历完,把a数组未处理项添加到arr数组后面
        while (2*q > b.length && 2*p < a.length){
            for (; 2*p < a.length; p++) {
                arr[2*k-1] = a[2*p-1];
                arr[2*k] = a[2*p];
                k++;
            }
        }

        //两数组最后一项指数相同,系数也相同的情况
//        while (2*q > b.length && 2*p > a.length){}

        //为arr数组的第一项赋值
        arr[0] = l-same;
        arr = Arrays.copyOf(arr,2*k-1);

        

        //处理常数项为0
        int length = arr.length;
        if(arr[length-1]==0 && arr[length-2]==0){
            arr = Arrays.copyOf(arr,length-2);
        }
        return arr;
    }

    //返回多项式相乘的结果
    private static int[] dataMul(int[] a, int[] b) {
        //用数组a的每一项乘以数组b,结果用二维数组保存
        int[][] arr = new int[a[0]][b.length];

        //用于指向相乘结果后的数组
        int[] newArr;
//        int[] newArr = new int[2*a[0]+2*b[0]+1];

        int k = 1; //处理数组a第k组(系数与指数)
        int s = 1; //处理数组b时的临时下标
        while(k<=a[0]){
            arr[k-1][0] = b[0];
            for (int i = 1; 2*i < b.length; i++) {
                arr[k-1][2*i-1] = a[2*k-1]*b[2*i-1]; //系数相乘
                arr[k-1][2*i]   = a[2*k]+b[2*i]; //指数相加
            }
            k++;
        }

        if(arr.length == 1){
            return arr[0];
        }else{
            newArr = arr[0];
            for (int i = 1; i < arr.length; i++) {
                newArr = dataAdd(newArr,arr[i]);
            }
            return newArr;
        }
    }

    //从输入读取一行数据,并返回数组
    private static int[] readData() {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        String[] split = s.replaceAll("( )+", " ").split(" ");
        int[] arr = new int[split.length];
        for(int i=0; i             arr[i] = Integer.parseInt(split[i]);
        }
        return arr;
    }

    //打印数组的内容,数据间以空格间隔,为空打印:0 0
    private static void printArr(int[] c) {
        if(c[0] == 0){
            System.out.print("0 0");
        }else{
            for (int i = 1; i < c.length; i++) {
                if(i == 1){
                    System.out.print(c[i]);
                }else{
                    System.out.print(" "+c[i]);
                }
            }
        }
    }
}
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396594.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号