2020.4.11——一元三次方程求解(二分法,科学计数保留小数点)

知识点:

  1. 二分法:遍历-100到100每一个整数,并判断两个整数带入的值相乘是否符合零点定理,如果符合,则他们之间存在符合方程的解。
  2. 保留小数点后几位:使用DecimalFormat构造。
  3. 连续float值相加会形成double值;

代码:

package 算法训练;

import java.text.DecimalFormat;
import java.util.Scanner;

public class 一元三次方程求解 {
	static float a,b,c,d;
	public static void main(String args[])
	{
		Scanner sc=new Scanner(System.in);
		a=sc.nextFloat();
		b=sc.nextFloat();
		c=sc.nextFloat();
		d=sc.nextFloat();
		for(int i=-100;i<=99;i++)
		{
			float a=(float) (i+1);
			if(f(i)==0)//遍历不到100
			{
				System.out.printf("%.2f ",(float)i);
			}
			else if(f(i)*f(a)<0)//两个数之间存在解
			{
				check((float) i,a);//二分计算
			}
			
		}
		if((int)f(100)==0)
				System.out.printf("%.2f ",(float)100);
	}

	private static void check(float i, float a2) {
		float x=i;
		float y=a2;
		while(Math.abs(x-y)>0.001)//如果小于0.001则跳出循环,确保可以精确到0.01
		{
			float mid=(x+y)/2;
			if(f(x)*f(mid)<0)
				y=mid;
			else
				x=mid;
		}
		System.out.printf("%.2f ",x);
		
	}

	private static float f(float e) {
		DecimalFormat df=new DecimalFormat("#.000");//精确到小数点后三位
		float z=(float) Math.pow(e,3)*a;
		float q=(float) Math.pow(e,2)*b;
		float m=(float) (c*e);
		return Float.valueOf((df.format(z+q+m+d)));//连续float值相加会形成double值;
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值