how to get a roman numeral calculator to work with negative numbers

3.1k Views Asked by At

The roman numeral calculator wont work when the result form the calculator is negative, i honestly don't know how to fix it. When the calculator gives out a positive value everything works fine for example the result will look like this

please enter the two two integer values that you want to vomplete the operation with
> 33
> 44
please enter the operation you want preformed
> +
Here is the answer 77 negative roman numeral value   Here is the answer in roman numerals
LXXVII

Code here:

public static void main(String[] args) {
  System.out.println("please enter the two two integer values that you want"
           + " to vomplete the operation with ");
  Scanner scan = new Scanner(System.in);
  int first = scan.nextInt();
  int sec = scan.nextInt();
  System.out.println(" please enter the operation you want preformed");
  String opera = scan.next();
  System.out.println(" Here is the answer");
  int value = Acalc(opera, first, sec);
  String roman = Roman(value);
  System.out.println(" Here is the answer in roman numerals ");
  System.out.println(roman);            
}

public static int Acalc(String opera, int n1, int n2){
  int result = 0;
  //Write the calulator 

 if (opera.equals("+")) {result=n1+n2;}

 if (opera.equals("-")) {result=n1-n2;}

 if (opera.equals("*")) {result=n1*n2;}

 if (opera.equals("/")) {result=n1/n2;}

 System.out.println(result);

 return result;
}

public static String Roman(double input){

  String s = "";

  if (input <1 || input < 999)
    System.out.println("negative roman numeral value ");

  while (input >= 100) {
    s += "C";
    input -= 100;
  }
  while (input >= 90) {
    s += "XC";
    input -= 90;
  }
  while (input >= 50) {
    s += "L";
    input -= 50;
  }
  while (input >= 40) {
    s += "XL";
    input -= 40;
  }
  while (input >= 10) {
    s += "X";
    input -= 10;
  }
  while (input >= 9) {
    s += "IX";
    input -= 9;
  }
  while (input >= 5) {
    s += "V";
    input -= 5;
  }
  while (input >= 4) {
    s += "IV";
    input -= 4;
  }
  while (input >= 1) {
    s += "I";
    input -= 1;
  } 
  return s;
}
2

There are 2 best solutions below

0
On BEST ANSWER

So for what it is worth, Roman Numerals could not represent Zero or negative numbers, but the following edits should let your program do it.

Where you have:

if (input <1 || input < 999)
    System.out.println("negative roman numeral value ");

Use:

if (input < 0){
    s="-";
    input *= -1;
}
else if (input > 999)
    return "Output too large";
else if (input == 0)
    return "nulla";

Nulla is Latin for Zero, since a Roman numeral equivalent does not exist.

0
On

The reason this is not working is because when result is negative is because it does not make sense to do input -= # because that makes the result MORE negative. It should be input += # instead. However, this adds quite a bit of work/length to your code.

Instead, would it be possible for you to store whether or not result is positive or negative? Then if it's negative, you can change it to positive, perform the conversion to Roman Numerals, and then add a negative sign in front of s.

For example:

orig_result = acalc(some parameters)

if (orig_result > 0){
    result = result
}
if (orig_result < 0){
    result = result * -1
}

//Convert to roman numerals

if (orig_result < 0){
    s = "-" + s
}