我是靠谱客的博主 玩命发夹,最近开发中收集的这篇文章主要介绍计算多项式之积,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

求两个多项式成绩:
pa=an*x^n + an-1*x^(n-1) + …… + a0
pb=bm*x^m + bm-1*x^(m-1) + …… + b0
其中an,an-1…… a0,bm,bm-1……b0均为正数,范围[-10000,10000],0<=n,m<=1000.
pa和pb的格式为“(-3,5),(87,4),(93,3),(3,0)”表示一个多项式-3x^5+87x^4+93x^3+3
输出也是这样的标准格式

分析:这里需要使用集合类中的Map集合来做,Map是用键值对来存储数据的,所以我们先计算出幂指数并存进map的key中,然后在计算系数并更新存入对应的key的value中。
代码如下:

import java.util.HashMap;
import java.util.Map;
/**
 * @author Hutongling
 *
 * @time:2017年4月18日 上午10:06:15
 */
public class 多项式相乘 {

    static Map<Integer, Integer> multiplyPolynormial(String pA,String pB){

        //处理原始的字符串得到每个整数用于计算多项式之积
        String a1=pA.replaceAll("\(", "");
        String a2=a1.replaceAll("\)", "");
        String b1=pB.replaceAll("\(", "");
        String b2=b1.replaceAll("\)", "");
        String[] pAStrings=a2.split(",");
        String[] pBStrings=b2.split(",");
        int[] coff1=new int[pAStrings.length/2];//存储系数
        int[] exp1=new int[pAStrings.length/2];//存储幂指数
        int j=0,k=0;
        for(int i=0;i<pAStrings.length;i++){
            if(i%2==0){
                coff1[j]=Integer.parseInt(pAStrings[i]);
                j++;
            }
            else{
                exp1[k]=Integer.parseInt(pAStrings[i]);
                k++;
            }
        }

        int[] coff2=new int[pBStrings.length/2];//存储系数
        int[] exp2=new int[pBStrings.length/2];//存储幂指数
        j=0;
        k=0;
        for(int i=0;i<pBStrings.length;i++){
            if(i%2==0){
                coff2[j]=Integer.parseInt(pBStrings[i]);
                j++;
            }
            else{
                exp2[k]=Integer.parseInt(pBStrings[i]);
                k++;
            }
        }

        Map<Integer, Integer> map=new HashMap<Integer,Integer>();
        for(int i=0;i<exp1.length;i++)
            for(int t=0;t<exp2.length;t++)
                map.put((exp1[i]+exp2[t]), 0);
        for(int i=0;i<exp1.length;i++)
            for(int t=0;t<exp2.length;t++){
                int cofftemp=coff1[i]*coff2[t];
                int exp=exp1[i]+exp2[t];
                int coff=cofftemp+map.get(exp);
                map.put(exp, coff);
            }
            return map;
    }

    public static void main(String[] args) {
        String pA = "(-3,5),(87,4),(93,3),(3,0)";
        String pB = "(-3,5),(87,4),(93,3),(3,0)";
        Map<Integer, Integer> map = multiplyPolynormial(pA, pB);
        System.out.print(map);
        int[] coff=new int[map.size()];
        int[] exp=new int[map.size()];
        int count=0;
        for(Integer exptemp:map.keySet()){
            exp[count]=exptemp;
            coff[count]=map.get(exptemp);
            count++;
        }
        String result="(";
        for(int i=exp.length-1;i>=0;i--)
            if(i!=0)
                result+=coff[i] + "," + exp[i] + "),(";
            else
                result+=coff[i] + "," + exp[i] + ")";
        System.out.println("n" + result);
    } 

}

代码结果:
{0=300, 3=9327, 4=8721, 5=-327, 6=837, 7=1434, 8=-255, 9=-804, 10=27}
(27,10),(-804,9),(-255,8),(1434,7),(837,6),(-327,5),(8721,4),(9327,3),(300,0)

最后

以上就是玩命发夹为你收集整理的计算多项式之积的全部内容,希望文章能够帮你解决计算多项式之积所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(103)

评论列表共有 0 条评论

立即
投稿
返回
顶部