计算多项式之积

来源:互联网 发布:罗马音发音软件 编辑:程序博客网 时间:2024/05/21 18:32

求两个多项式成绩:
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)

0 0
原创粉丝点击