0

二次方程式を実行する電卓を作ろうとしています。

現在、結果が小数になる場合、NaN が返されます。(編集:解決済み)

できれば、結果を簡略化された根号形式 (つまり √(99) = 3√(11) ) にしたいと考えています。

これを達成するにはどうすればよいですか?

これは私がこれまでに持っているものです。

// Do the math
private double mathCalcPlus(double varA,double varB,double varC) {
    return ((-varB + Math.sqrt(varB * varB - 4 * varA * varC)) / 2 * varA);

}

private double mathCalcMinus(double varA,double varB,double varC) {
    return ((-varB - Math.sqrt(varB * varB - 4 * varA * varC)) / 2 * varA);

}

どんな助けでも大歓迎です。

4

2 に答える 2

1

これはうまくいきます!しかし、楽しみのために部首記号のトップバーを追加することにしました:D

 import java.util.Scanner;

public class Radical {

public static void main(String[] args) {

    System.out.print("Enter the unsimplified radical: ");
    Scanner scan = new Scanner(System.in);
    int input = scan.nextInt();

    recurse(input);

}

public static void recurse(int x) {

    System.out.println("                         ______");
    System.out.println("Attempting to simplify -/" + x);

    int a = 0;
    int b = 0;
    int count = 0;

    for (int i = 1; i < x; i++) {
        if ((i * (x/i)) == x) {
            //System.out.println(i + "<i rest>" + (x/i));
            a = i;
            b = x/i;
            if (Math.sqrt(a)%1==0) {
                if (a != 1) {
                System.out.println("                      ______");
                System.out.println("                   " + (int)Math.sqrt(a) + "-/" + b);
                count = 1;
                }
            }
        }
    }

    if (count>0) {
        recurse(b);
    } else if (count==0) {
        System.out.println("                  ______");
        System.out.println("Cannot simplify -/" + x);
    }

}

}
于 2013-02-18T23:51:15.093 に答える
0

根号を単純化する限り、次のことが役立ちます。簡略化されていない根号 (850 としましょう) を与えると、正しい答え (5-/34) が返されます。また、再度分解する必要がある場合に備えて、部首に残っているものを再帰的に単純化しようとします。

これはすぐに書かれたので、私が見逃したエッジケースが計算を台無しにしてしまうと確信していますが、少なくとも少しは役立つことを願っています. 頑張ってください!

import java.util.Scanner;

public class Radical {

public static void main(String[] args) {

    System.out.print("Enter the unsimplified radical: ");
    Scanner scan = new Scanner(System.in);
    int input = scan.nextInt();

    recurse(input);

}

public static void recurse(int x) {

    System.out.println("Attempting to simplify -/" + x);

    int a = 0;
    int b = 0;
    int count = 0;

    for (int i = 1; i < x; i++) {
        if ((i * (x/i)) == x) {
            //System.out.println(i + "<i rest>" + (x/i));
            a = i;
            b = x/i;
            if (Math.sqrt(a)%1==0) {
                if (a != 1) {
                System.out.println((int)Math.sqrt(a) + "-/" + b);
                count = 1;
                }
            }
        }
    }

    if (count>0) {
        recurse(b);
    } else if (count==0) {
        System.out.println("Cannot simplify -/" + x);
    }

}

}
于 2012-04-04T18:59:02.747 に答える