黑马程序员____求多项式系数

这篇博客主要介绍如何在Java中处理多项式系数的计算,适用于Android和Java开发。内容涉及异常处理、字符串操作和对象使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

----------------------android培训java培训、期待与您交流! ----------------------

 

import java.util.*;
import java.io.*;
/*
题目:
   (x+a0)(x+a1)...(x+an-1) = x^n + bn-1x^n-1 + ... +b0用户输入a0,a1,...,an-1,求b0,b1,...,bn-1
*/
public class StatisticsPolynomialCoefficient
{
	//声明数组存放多项式因此
	static int [] arr;
	static int [] b;
	String s1="";
	Scanner input = new Scanner(System.in);	
	//输入多项式因子
	public void inputFactor()
	{	    
		sop("请输入要输入的整数因子个数");
		do{
			try {				    
				    String str = input.nextLine();
                    int x = Integer.parseInt(str);
					if(x<=0){
						System.out.println("您输入的不是一个正整数,请重新输入");
						continue ;
					}
				    arr = new int[x];	
			} catch (Exception e) {    
				System.out.println("您输入的不是一个整数,请重新输入");
				continue;
		    }
		    break;
			
		}while(true);
		
		for(int i=0;i<arr.length;i++){
			sop("请输入第"+(i+1)+"个数:");
			try {		
				String str = input.nextLine();
                arr[i]  = Integer.parseInt(str);
			}catch (Exception e) {    
				System.out.printf("您输入的不是一个整数");
				i--;
				continue;
			}
			if(i!=0)
			{
				s1+="*";
			}
				s1+="(x+"+arr[i]+")";		    			
			}		
		sop("多项式因子表现形式为:f(x)="+s1);		
		
	}
  
	//多项式函数的系数递归求值。
	private static int b(int n,int k)
	{
	/*
	数组参数a为多项式因子(x+a[0])(x+a[1])...(x+a[n-1])
	n代表多项式个数
	n=1         1  b(1,0)=a[0]
	n=2       1  b(2,1)=a[0]+a[1]=b(1,0)+a[1]                b(2,0)=a[0]a[1]=b(1,0)*a[1]
	n=3   1 b(3,2)=a[0]+a[1]+a[2]=b(2,1)+a[2]           b(3,1)=a[0]a[1]+a[0]a[2]+a[1]a[2]=b(2,0)+b(2,1)*a[2]   b(3,0)=a[0]a[1]a[2]=b(2,0)*a[2]
	...............                                                  .....
	n=n  1  b(n,n-1)=a[0]+...a[n-1]=b(n-1,n-2)+a[n-1]   b(n,k)=b(n-1,k-1)+b(n-1,k)*a[n-1]   ....           b(n,0)=a[0]a[1]...a[n]=b(n-1,0)*a[n-1]
	k表示多项式f(x)的k次幂
	b(n,k)表示n次多项式的k次幂前的系数和
	*/
		if((n>0&&n<=arr.length)&&(k>=0&&k<arr.length)){
			if(n==1) return arr[0];
			if(k==0) return arr[n-1]*b(n-1,0);
			else if(k==n-1) return arr[n-1]+b(n-1,n-2);
			else return b(n-1,k)*arr[n-1]+b(n-1,k-1);
		}
		else{
			sop("您输入的参数范围有误,不满足(0<n<=arr.length&&0<=k<arr.length)");
			return -1;
		}
	}
	//输出多项式展开后的系数表现形式
	private void outputCoefficent()
	{
		String s2 ="多项式展开后系数表现形式为:f(x)=x^"+arr.length;
		for(int i=arr.length-1;i>=0;i--)
		{
			if(i==0) s2+="+"+b(arr.length,i);
			else if(i==1) s2+="+"+b(arr.length,i)+"*x";
			else s2+="+"+b(arr.length,i)+"*x^"+i;
		}
		sop(s2);
	}
	
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void main(String [] args)
	{
		StatisticsPolynomialCoefficient spc = new StatisticsPolynomialCoefficient();
		spc.inputFactor();
		spc.outputCoefficent();
	}
}


 运行结果:


 




---------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.youkuaiyun.com/heima






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值