小笨蛋程序

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;

public class Method {
	// x = 0.78a+1.38b+2.58c+3.78d+4.98e
    // e 尽可能大
    // z = x -(a+b+c+d+e) 尽可能小
    // y = x - (0.78a+1.38b+2.58c+3.78d+4.98e) 尽可能小
    // x = 4.98a+3.78b
    // x = 4.98a
    public static void main(String[] args) {
    	Scanner s = new Scanner(System.in);
    	System.out.println("请输入数值:---->");
    	BigDecimal x = s.nextBigDecimal();
    	System.out.println("请输入理想误差范围(希望0~0.6,则输入0.6):---->");
    	BigDecimal error = s.nextBigDecimal();
    	
        BigDecimal a_ = new BigDecimal(4.98).setScale(2, RoundingMode.HALF_UP);
        BigDecimal b_ = new BigDecimal(3.78).setScale(2, RoundingMode.HALF_UP);
        BigDecimal c_ = new BigDecimal(2.58).setScale(2, RoundingMode.HALF_UP);
        BigDecimal d_ = new BigDecimal(1.38).setScale(2, RoundingMode.HALF_UP);
        BigDecimal e_ = new BigDecimal(0.78).setScale(2, RoundingMode.HALF_UP);
        FiveElementsMethod(x,error,a_,b_,c_,d_,e_);

    }
    
    /**
     * @param x 差额
     * @param error 误差
     * @param a_ 系数1
     * @param b_ 系数2
     * @param c_ 系数3
     * @param d_ 系数4
     * @param e_ 系数5
     */
    public static void FiveElementsMethod(BigDecimal x,BigDecimal error,BigDecimal a_,BigDecimal b_, BigDecimal c_, BigDecimal d_,BigDecimal e_){
    	// 获取最大整数值
        BigDecimal a = DivideMAX(x,a_);
        BigDecimal b = new BigDecimal(0);
        BigDecimal c = new BigDecimal(0);
        BigDecimal d = new BigDecimal(0);
        BigDecimal e = new BigDecimal(0);

        // 每次结果差异
        BigDecimal y = new BigDecimal(0);
        for(int a_i=a.intValue();a_i>=1;a_i--){
            // b = (x-4.98a)/3.78
            y=x.subtract(a_.multiply(new BigDecimal(a_i)));
            b = DivideMAX(y,b_);
            for (int b_i = b.intValue();b_i>=0;b_i--){
                y = x.subtract(a_.multiply(new BigDecimal(a_i))).subtract(b_.multiply(new BigDecimal(b_i)));
                c = DivideMAX(y,c_);
                for(int c_i = c.intValue();c_i>=0;c_i--){
                    y = x.subtract(a_.multiply(new BigDecimal(a_i))).subtract(b_.multiply(new BigDecimal(b_i))).subtract(c_.multiply(new BigDecimal(c_i)));
                    d = DivideMAX(y,d_);
                    for(int d_i = d.intValue();d_i>=0;d_i--){
                        y = x.subtract(a_.multiply(new BigDecimal(a_i))).subtract(b_.multiply(new BigDecimal(b_i))).subtract(c_.multiply(new BigDecimal(c_i))).subtract(d_.multiply(new BigDecimal(d_i)));
                        e = DivideMAX(y,e_);
                        for(int e_i = e.intValue();e_i>=0;e_i--){
                            y = x.subtract(a_.multiply(new BigDecimal(a_i))).subtract(b_.multiply(new BigDecimal(b_i))).subtract(c_.multiply(new BigDecimal(c_i))).subtract(d_.multiply(new BigDecimal(d_i))).subtract(e_.multiply(new BigDecimal(e_i)));
                            if (y.compareTo(new BigDecimal(0))==-1 || y.compareTo(error)==1) continue;
                            System.out.println(x+"="+a_+"*"+a_i+"+"+b_+"*"+b_i+"+"+c_+"*"+c_i+"+"+d_+"*"+d_i+"+"+e_+"*"+e_i+";误差---->"+y.setScale(2, RoundingMode.HALF_UP));

                        }
                    }

                }

            }

        }
    }
    
    

    /**
     * 
     * @param bigDecimal1
     * @param bigDecimal2
     * @return v=bigDecimal1/bigDecimal2,获取最大整数值
     */
    public static BigDecimal DivideMAX(BigDecimal bigDecimal1,BigDecimal bigDecimal2){
    	BigDecimal divideValue = new BigDecimal(0);
    	try {
    		divideValue = bigDecimal1.divide(bigDecimal2,0,BigDecimal.ROUND_DOWN);
		} catch (ArithmeticException e) {
			System.out.println("系数不能为零");
		}
        return divideValue;
    }
    
    

    // 获取当前层差值
    public  static  BigDecimal subtract_i(BigDecimal bigDecimal1,BigDecimal bigDecimal2,BigDecimal bigDecimal3){
        return bigDecimal1.subtract(bigDecimal2.multiply(bigDecimal3));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值