多项式展开
问题描述:
输入:a, b, n, c, d, t的值
求(ax+b)^n*(cx+d)^t的展开式
样例:
输入: 2 3 4 2 4 5
输出:[(2x+3)^4]*[(2x+4)^5]的展开式如下:
82944x^0+428544x^1+981504x^2+1307904x^3+1117504x^4+634912x^5+239872x^6+58112x^7+8192x^8+512x^9
算法解析:
a. 先展开第一个式子(ax+b)^n;用key1[n]来存储展开x^n的系数;同理用key2[]记录第二个式子。
b. i从0开始n,用key[n]==key1[i]*key[n-i]+key[n]。
c. key[]数组便记录了结果中x^0——X^n的系数。
代码:
1 package xiaomiDuoxiangshi; 2 3 import java.util.*; 4 5 public class xiaomiBishi1 { 6 static void CengJi(int A,int B ,int N,int ky[]){ 7 8 int a=A;int b=B;int n=N; 9 for(int i=0;i<=n;i++) 10 { 11 ky[i]=(int)Math.pow(a, i)*(int)Math.pow(b, n-i); 12 // System.out.println(ky[i]); 13 } 14 System.out.println("paused"); 15 for(int i=0;i<=n;i++) 16 { 17 for(int j=0;j<i;j++) 18 ky[i]=ky[i]*(n-j)/(j+1); 19 // System.out.println(ky[i]); 20 } 21 // System.out.println("paused"); 22 } 23 public static void main(String[] args) { 24 25 int a,b,c,d,n,t; 26 String f; 27 String k_s[]; 28 Integer k[]; 29 Scanner br=new Scanner(System.in); 30 f=br.nextLine(); //把输入的字符串赋给f 31 br.close(); 32 k_s=f.split(" "); 33 a=Integer.parseInt(k_s[0]); 34 b=Integer.parseInt(k_s[1]); 35 n=Integer.parseInt(k_s[2]); 36 c=Integer.parseInt(k_s[3]); 37 d=Integer.parseInt(k_s[4]); 38 t=Integer.parseInt(k_s[5]); 39 /* 40 System.out.print(a); 41 System.out.print(b); 42 System.out.print(c); 43 System.out.print(d); 44 System.out.println(n); 45 */ 46 int[] key1; 47 int[] key2; 48 key1=new int[1000]; 49 key2=new int[1000]; 50 int key[]=new int[10000]; 51 CengJi(a,b,n,key1); 52 CengJi(c,d,t,key2); 53 System.out.println("结果是:"); 54 for(int p=0;p<=n+t;p++){ 55 key[p]=0; 56 for(int q=0;q<=p;q++){ 57 // System.out.println("Begin:"); 58 // System.out.println(key[p]); 59 // System.out.println(q); 60 // System.out.println(p-q); 61 // System.out.println(key1[p]); 62 // System.out.println(key2[p-q]); 63 key[p]=key[p]+key1[q]*key2[p-q]; 64 //System.out.println(key[p]); 65 } 66 if(p!=0) 67 System.out.print("+"); 68 System.out.print(key[p]); 69 System.out.print("x^"); 70 System.out.print(p); 71 } 72 System.out.println(); 73 } 74 }