Reputation: 311
Regarding quadratic equations (learn more here), I've taken the a
, b
, and c
of the equation as input.
A sample equation will be this: 21x^2 - 8x - 4 Here, a = 21, b = -8, c = -4. So, on solving (without formula), => 21x^2 - 14x + 6x - 4 = 0.
I need the two middle numbers, that is, in this case 14 and 6 (read factors). I think I have done all correct, but the input seems to be infinite and does not stop at all. Can you please rectify the mistake? I am also curious to learn why that happened.
import java.util.Scanner;
public class QuadFact {
static Scanner sc = new Scanner(System.in);
static int a,b,c;
static int P, diff, p;
static int i;
static boolean found = false;
void accept(){
System.out.println("Enter the a, b, c");
a = sc.nextInt(); b = sc.nextInt(); c = sc.nextInt();
}
void compute(){
P = a * c;
diff = 0;
while(!found){
for (i = b + 1;;i++){
diff = i - b;
p = i * diff;
if (p==P) {
found = true;
break;
}
}
}
}
void display(){
System.out.print("These are the raw numbers, should be correct.
Still,\n it is advisable you verify it.");
System.out.println("One factor: " + i);
System.out.println("Other factor: " + diff);
}
public static void main(String[] args){
QuadFact a = new QuadFact();
a.accept();
a.compute();
a.display();
}
}
Upvotes: 0
Views: 973
Reputation: 93
ok, I wrote a code for that.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
//Declare and get the variables
int a, b,c;
Scanner s = new Scanner(System.in);
System.out.println("Enter A");
a = s.nextInt();
System.out.println("Enter B");
b = s.nextInt();
System.out.println("Enter c");
c = s.nextInt();
//A should be 1 if not divide a, b and c by a
if (a>1) {
b= b/a;
c=c/a;
a= a/a;
}
//Just printing what the values of ABC IS AGAIN
System.out.println("A = "+a+" B = "+b+" C = "+c);
//Just printing what the values of ABC IS AGAIN but in reverse, that is if c was 5 it becomes -5
//another way to reverse positive to negative and vice versa
System.out.println("A = "+(0-a)+" B = "+(0-b)+" C = "+(0-c));
//Set i as c and start the loop from highest to lowest.
for (int i = Math.abs(c); i>0 ;i-- ) {
//if a multiple is found it proceeds and checks for the
//multiple combination that when multiplied you get C and the addition or subtraction gives you B
if (c%i==0) {
int fac1 = c/i;
//Displays the multiples found
System.out.println(i+" x "+fac1+" = "+c);
//There are 4 possible outcomes or cases
//case 1 multiple 1 - multiple 2 = b
//case 2 multiple 2 - multiple 1 = b
//case 3 multiple 1 + multiple 2 = b
//case 4 -multiple 1 + -multiple 2 = b
if (i-fac1 == b) {
//System.out.println("case 1: " + i+"-"+fac1+"="+b);
answer(i,fac1);
break;
}
else if(fac1 - i == b){
//System.out.println("case2: " + fac1+"-"+i+"="+b);
answer(fac1,i);
break;
}
else if (i +fac1 == b ) {
//System.out.println("case3: " + i+"+"+fac1+"="+b);
answer(i,fac1);
break;
}
else if((0-Math.abs(i)) + (0- Math.abs(fac1))==b) {
//System.out.println("case4: "+"-"+i+ " + "+ "-"+ fac1 +"="+b);
answer((0-Math.abs(i)),(0- Math.abs(fac1)));
break;
}
else {
System.out.println("Probably not a factorizable Equation");
}
}
}
}
//Use this method to show the final answer
private static void answer(int f1, int f2) {
System.out.println("x = "+(0-f1) +" or x = "+(0-f2));
}
}
Upvotes: 1
Reputation: 31300
I think you have to look "on both sides" of b for a factor pair that adds up to b and produces the product a*c.
void compute(){
P = a * c;
while(!found){
for( i = 1; ; i++ ){
diff = b - i;
if (i * diff == P) {
found = true;
break;
}
diff = b + i;
if (-i * diff == P) {
found = true;
break;
}
}
}
}
Upvotes: 2