The Assignment: You are to design a Java application to carry out additions and
ID: 3549785 • Letter: T
Question
The Assignment: You are to design a Java application to carry out additions and subtractions for numbers of any length. A number is represented as an object which includes a sign and two strings for the whole and decimal parts of the number. And, the operations must be done by adding or subtracting characters directly. YOU ARE NOT ALLOWED TO CONVERT THESE STRINGS TO NUMBERS BEFORE THE OPERATION!
The program must use a "Number" class which includes at least the following methods:
Number ( );
Number (double n);
Number add (Number RHS);
Number subtract (Number RHS);
String toString ( );
I WOULD LIKE THE PROGRAM TO ASK THE USER TO INSERT TWO NUMBERS AND THEN DISPLAY THE SUM AND THE DIFFERENT USING THE ADD/SUB CHARACTERS (NO STRINGS ARE ALLOWED) THE SIGNS SHOULD ALSO CHANGE DEPENDING ON WHAT NUMBERS ARE BEING INSERTED INTO THE PROGRAM. I HAVE DONE EVERYTHING IN THE CODE EXCEPT THE SUBTRACTION PART AND THE CHANGING THE SIGN PART. PLEASE HELP WITH THAT PART. YOU CAN ADD TO MY CODE:
Explanation / Answer
package chegg.crap;
import java.util.Scanner;
public class Number
{
private String whole;
private String decimal;
private String sign;
public static void main (String [ ] args)
{
Scanner in = new Scanner(System.in);
System.out.println("Enter first number (in double format)");
Number numLhs = new Number(in.nextDouble());
System.out.println("Enter second Number");
Number numRhs = new Number(in.nextDouble());
in.close();
Number sum = numLhs.add(numRhs);
Number diff = numLhs.subtract(numRhs);
System.out.println("Sum fo numbers::"+sum.toString());
System.out.println("difference of numbers::"+diff.toString());
}
public Number(double n){
String thisNum = new Double(n).toString();
if(n>0){
this.sign="+";
this.whole = thisNum.substring(0, thisNum.indexOf("."));
this.decimal = thisNum.substring(thisNum.indexOf(".")+1);
}
else if(n<0){
this.sign="-";
this.whole = thisNum.substring(1, thisNum.indexOf("."));
this.decimal = thisNum.substring(thisNum.indexOf(".")+1);
}
}
public Number ( )
{
whole = "0";
decimal = "0";
sign = "+";
}
public Number add (Number RHS)
{
this.align(RHS);
if(RHS.sign.equals("-")){
return this.subtractNum(RHS);
}
else
return this.addNum(RHS);
}
public Number subtract(Number RHS)
{
this.align(RHS);
if(RHS.sign.equals("-")){
return addNum(RHS);
}
else
return this.subtractNum(RHS);
}
private Number addNum (Number RHS)
{
Number sum = new Number ( );
sum.decimal = "";
int carry = 0;
int decimalL = this.decimal.length ( );
for (int i = decimalL -1; i >= 0; i--)
{
char firstC = this.decimal.charAt (i);
char secondC = RHS.decimal.charAt (i);
int sumX = (firstC - 48) + (secondC - 48) + carry;
char sumC = (char)((sumX % 10) + 48);
carry = sumX / 10;
sum.decimal = sumC + sum.decimal;
}
sum.whole = "";
int wholeL = this.whole.length ( );
for (int i = wholeL -1; i >= 0; i--)
{
char firstC = this.whole.charAt (i);
char secondC = RHS.whole.charAt (i);
int sumX = (firstC - 48) + (secondC - 48) + carry;
char sumC = (char)((sumX % 10) + 48);
carry = sumX / 10;
sum.whole = sumC + sum.whole;
}
if (carry != 0)
sum.whole = "1" + sum.whole;
return sum;
}
private Number align(Number RHS){
int rhsDotPosition = RHS.toString().indexOf(".");
int numDotPosition = this.toString().indexOf(".");
String rhsWhole = RHS.toString().substring(1, rhsDotPosition);
String rhsDecimal = RHS.toString().substring(rhsDotPosition+1);
String numWhole = this.toString().substring(1, numDotPosition);
String numDecimal = this.toString().substring(numDotPosition+1);
int rhsWholeLength = rhsWhole.length();
int rhsDecimalLength = rhsDecimal.length();
int numWholeLength = numWhole.length();
int numDecimalLength = numDecimal.length();
if(rhsWholeLength>numWholeLength){
for(int i=0; i<rhsWholeLength-numWholeLength; i++){
numWhole = "0"+numWhole;
}
this.whole = numWhole;
}
else if(numWholeLength>rhsWholeLength){
for(int i=0; i<numWholeLength-rhsWholeLength; i++){
rhsWhole = "0"+rhsWhole;
}
RHS.whole = rhsWhole;
}
else{
// do nothing
}
if(rhsDecimalLength>numDecimalLength){
for(int i=0; i<rhsDecimalLength-numDecimalLength; i++){
numDecimal = numDecimal+"0";
}
this.decimal = numDecimal;
}
else if(numDecimalLength>rhsDecimalLength){
for(int i=0; i<numDecimalLength-rhsDecimalLength; i++){
rhsDecimal = rhsDecimal+"0";
}
RHS.decimal = rhsDecimal;
}
else{
// do nothing
}
return RHS;
}
private Number subtractNum(Number RHS)
{
Number difference = new Number ( );
difference.decimal = "";
difference.whole = "";
int carry = 0;
for(int i=this.decimal.length()-1;i>=0;i--){
char thisChar = this.decimal.charAt(i);
char rhsChar = RHS.decimal.charAt(i);
int thisLast = (((int)thisChar)-48)+carry;
int rhsLast = ((int)rhsChar)- 48;
if(thisLast<rhsLast){
carry = -1;
thisLast = thisLast+10;
difference.decimal = String.valueOf(thisLast-rhsLast)+difference.decimal;
}
else{
carry = 0;
difference.decimal = String.valueOf(thisLast-rhsLast)+difference.decimal;
}
}
for(int i=this.whole.length()-1;i>=0;i--){
char thisChar = this.whole.charAt(i);
char rhsChar = RHS.whole.charAt(i);
int thisLast = (((int)thisChar)-48)+carry;
int rhsLast = ((int)rhsChar)- 48;
if(thisLast<rhsLast){
carry = -1;
thisLast = thisLast+10;
difference.whole = String.valueOf(thisLast-rhsLast)+difference.whole;
}
else{
carry=0;
difference.whole = String.valueOf(thisLast-rhsLast)+difference.whole;
}
}
return difference;
}
public String toString ( )
{
return sign + whole + "." + decimal;
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.