简化二次公式中的基数?

时间:2012-03-07 03:20:03

标签: java quadratic

我对java很新,需要帮助编写简化二次公式的代码。现在我的程序将两个解决方案截断为两位小数。但我不知道如何简化判别式的平方。例如,如果判别式为8,那么我希望程序输出2√2。请为我提供必要的代码吗?

package quadraticprogram;

//This imports the DecimalFormat class, Scanner class, and all other Java classes.
import java.text.DecimalFormat;
import java.util.Scanner;
import java.util.*;

public class QuadraticProgram {

  public static void main(String[] args) {
    int a, A;

    Scanner scan = new Scanner (System.in);
    System.out.println ("Use integer value, enter minimum value of a:");
    a = scan.nextInt();

    System.out.println ("Use integer value, enter maximum value of A:");
    A = scan.nextInt();
    Random generator = new Random();

    // Generate random integers in the range from a to A
    // and assign them to numa, numb, and numc
    double numa = generator.nextInt(A - a + 1) + a;
    double numb = generator.nextInt(A - a + 1) + a;
    double numc = generator.nextInt(A - a + 1) + a;

    System.out.println ("numa" + numa);
    System.out.println ("numb" + numb);
    System.out.println ("numc" + numc);

    // Define d as the discriminant and take its square root
    double d;
    d = ((numb*numb)-(4*numa*numc));
    double r = Math.sqrt(d);

    // Calculate the two solutions
    double s = ((-numb + r)/(2*numa));
    double S = ((-numb - r)/(2*numa));

    // Truncate the two solutions to two decimal places.
    DecimalFormat fmt = new DecimalFormat ("0.##");

    // If the discriminant is negative there are no real solutions.
    if (d<0) {
      System.out.println("No Real Solutions");
    } else  {
    // Print both solutions if the discriminant is not negative
      System.out.print(fmt.format(s));
      System.out.println("," + fmt.format(S));
    }
  }
}

现在程序的用户输入最小整数,a和最大整数A.然后生成a和A之间的随机双值,numa,numb和numc。然后程序计算判别式, d,作为双重。然后取d的平方根,即r。然后程序完成计算两个解s和S.然后程序打印两个解,如果判别式不小于0,并将它们截断到两个小数位。

5 个答案:

答案 0 :(得分:4)

基本算法非常简单:

  1. 判断判别数中的数字
  2. 从基础
  3. 中取出两次出现的因素

    以下是一个例子:

    sqrt(180) = sqrt(2*2*3*3*5) = 2*3*sqrt(5) = 6*sqrt(5)

    请注意,如果判别式是非整数,则不起作用。

答案 1 :(得分:0)

假设我明白你的目标是以简化的方式打印判别方的平方根,这应该有效(我使用?而不是我没有时间查找如何打印的sqrt符号):

     while(d%Math.pow(f, 2)!=0&&f>1){
        f--;
    }

    if(f>1&&d/Math.pow(f, 2)!=1){
        System.out.println(f+"?"+d/Math.pow(f, 2));
    }else{
        System.out.println(Math.sqrt(d));
    }

希望这有帮助!

答案 2 :(得分:0)

1.不确定你做了什么,但这是我的解决方案。

import java.util.Scanner;
public class quadform {

    public static void main(String[] args) {
    double a,b,c;

    Scanner takea = new Scanner(System.in);
    System.out.println("Enter variable a");
    double inputa = takea.nextDouble();

    Scanner takeb = new Scanner(System.in);
    System.out.println("Enter variable b");
    double inputb = takeb.nextDouble();

    Scanner takec = new Scanner(System.in);
    System.out.println("Enter variable c");
    double inputc = takec.nextDouble();


    a = inputa;
    b = inputb;
    c = inputc;


    double rootone,roottwo;
    double discriminant;
    double thefirstpart,thesecondpart;
    thefirstpart = Math.pow(b,2);
    thesecondpart =4 *a *c;
    discriminant = Math.sqrt(thefirstpart - thesecondpart);
    rootone = (-(b)+ discriminant)/(2 *(a)); 
    roottwo = (-(b)- discriminant)/(2 *(a));

    System.out.println("The first root (+) is: " + rootone);
    System.out.println("The second root(-) is: " + roottwo);




    }

}

答案 3 :(得分:0)

我个人认为这是用最少的代码获得正确答案的最简单方法:

import javax.swing.JOptionPane;
public class ShortABC 
{
    public static void main(String[] args) 
    {
    float a = Float.parseFloat(JOptionPane.showInputDialog(null, "Please, give in variable a", "Input variable A", JOptionPane.QUESTION_MESSAGE)), b = Float.parseFloat(JOptionPane.showInputDialog(null, "Please, give in variable b", "Input b", JOptionPane.QUESTION_MESSAGE)), c = Float.parseFloat(JOptionPane.showInputDialog(null, "Please, give in variable c", "Input c", JOptionPane.QUESTION_MESSAGE)), D = (float) (Math.pow(b, 2) - (4 * a * c)), x1 = (float) ((-b - Math.sqrt(D)/(2*a))), x2 = (float) ((-b + Math.sqrt(D)/(2*a)));//Input for all variables.
    if(D < 0) JOptionPane.showMessageDialog(null,"No answers possible");//Output for answer(s). else if(D == 0) 
    else if(D == 0) JOptionPane.showMessageDialog(null,"One possible answer: " + x1);//Output for answer(s).
    else if(D > 0) JOptionPane.showMessageDialog(null, "Two possible answers: " + x1 + " en " + x2);//Output for answer(s).
    }
}

我不知道如何在spuareroots中打印答案。祝你好运。 我希望这会有所帮助。

答案 4 :(得分:0)

我基本上创建了一个函数来查找平方根的平方因子,并将其用于其他所有内容。

public static double sqFactor(double num) {
    double sqInt = 1;
    double lastInt=1;
    for (int i=2; i<=num;) {
        if (num%i==0) {
            num /= i;


            if (i==lastInt) {
                sqInt *= i;
                lastInt=1;
                i=1;
            }
            else lastInt=i;
            i=1;

        }

        i++;

    }
    return sqInt;
}

    public static void main(String[] args)  {

        Scanner scan = new Scanner (System.in);

        System.out.println("a =");
        double a = scan.nextDouble();

        System.out.println("b =");
        double b = scan.nextDouble();

        System.out.println("c =");
        double c = scan.nextDouble();

        double d = Math.pow(b, 2) -(4 * a * c);
        if (d<0) {
        d *= -1;
        System.out.println("Your roots are " + -b +" +- " + sqFactor(d) +"i sqrt" + d/sqFactor(d) );
        }
        else {
        double root1 = (-b + Math.sqrt(d)) / (2 * a);
        double root2 = (-b - Math.sqrt(d)) / (2 * a);

        System.out.println("Your first root value is " + root1);
        System.out.println("Your second root value is " + root2);
        }



    }