概述
求两个多项式成绩:
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)
最后
以上就是玩命发夹为你收集整理的计算多项式之积的全部内容,希望文章能够帮你解决计算多项式之积所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复