计算多项式之积
来源:互联网 发布:罗马音发音软件 编辑:程序博客网 时间: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
- 计算多项式之积
- 多项式计算
- 多项式计算
- 多项式计算
- 计算多项式
- 计算多项式
- 计算多项式
- 多项式计算
- 多项式计算
- 多项式计算
- 数据结构之链表一元多项式的计算
- 判断两多项式之积是否等于另一多项式
- 一元多项式的计算
- 递归计算多项式
- 计算多项式的值
- 计算多项式的值
- poj 1996多项式计算
- 一元多项式的计算
- SPOJ EIGHTS
- C语言
- c#对AutoCAD二次开发
- 【mysql】Centos6.5使用yum安装mysql——快速上手必备
- 第12条:考虑实现Comparable接口
- 计算多项式之积
- Mac 装VMWare虚拟机(win 7) 提供工具下载
- Linux 网卡的配置
- 有向图或者无向图概率dp
- Linux软件源(学习笔记)
- JS带缓存效果的移动函数封装
- CentOS7使用firewalld打开关闭防火墙与端口
- jdom操作xml
- Three.js 阴影效果