Question

New answers only outcomes for this lab: Recursive concepts Uses for recursion Infinite recursion Problem solving...

New answers only

outcomes for this lab:

  • Recursive concepts
  • Uses for recursion
  • Infinite recursion
  • Problem solving with recursion

Say My Number

You will produce a short, elegant, recursive algorithm that spells out any number between 1 and 2.1 billion.

Allow the user to input a number in the range from 1 to 2.1 billion (a positive 32-bit int), then spell out the number (e.g. 123456 would output "one hundred twenty three thousand four hundred fifty six").

Use a recursive method "say(n)" where say(n) returns the string corresponding to the input integer n.

The beauty of recursion is that this can be done with just a few if statements and switch/case values (about 30 or so total), thanks to the way we read numbers (the number 123,123,123 is spoken the same as a single 123, but with a few "place" words - million, thousand, etc.).

Deliverable:

Saymynumber.java

0 0
Add a comment Improve this question Transcribed image text
Answer #1

package HomeworkLib;

import java.text.DecimalFormat;

import java.util.Scanner;

public class Saymynumber {

private static final String[] tensNames = {

"",

" ten",

" twenty",

" thirty",

" forty",

" fifty",

" sixty",

" seventy",

" eighty",

" ninety"

};

private static final String[] numNames = {

"",

" one",

" two",

" three",

" four",

" five",

" six",

" seven",

" eight",

" nine",

" ten",

" eleven",

" twelve",

" thirteen",

" fourteen",

" fifteen",

" sixteen",

" seventeen",

" eighteen",

" nineteen"

};

private Saymynumber() {}

private static String convertLessThanOneThousand(int number) {

String soFar;

if (number % 100 < 20){

soFar = numNames[number % 100];

number /= 100;

}

else {

soFar = numNames[number % 10];

number /= 10;

soFar = tensNames[number % 10] + soFar;

number /= 10;

}

if (number == 0) return soFar;

return numNames[number] + " hundred" + soFar;

}

public static String convert(long number) {

// 0 to 999 999 999 999

if (number == 0) { return "zero"; }

String snumber = Long.toString(number);

// pad with "0"

String mask = "000000000000";

DecimalFormat df = new DecimalFormat(mask);

snumber = df.format(number);

// XXXnnnnnnnnn

int billions = Integer.parseInt(snumber.substring(0,3));

// nnnXXXnnnnnn

int millions = Integer.parseInt(snumber.substring(3,6));

// nnnnnnXXXnnn

int hundredThousands = Integer.parseInt(snumber.substring(6,9));

// nnnnnnnnnXXX

int thousands = Integer.parseInt(snumber.substring(9,12));

String tradBillions;

switch (billions) {

case 0:

tradBillions = "";

break;

case 1 :

tradBillions = convertLessThanOneThousand(billions)

+ " billion ";

break;

default :

tradBillions = convertLessThanOneThousand(billions)

+ " billion ";

}

String result = tradBillions;

String tradMillions;

switch (millions) {

case 0:

tradMillions = "";

break;

case 1 :

tradMillions = convertLessThanOneThousand(millions)

+ " million ";

break;

default :

tradMillions = convertLessThanOneThousand(millions)

+ " million ";

}

result = result + tradMillions;

String tradHundredThousands;

switch (hundredThousands) {

case 0:

tradHundredThousands = "";

break;

case 1 :

tradHundredThousands = "one thousand ";

break;

default :

tradHundredThousands = convertLessThanOneThousand(hundredThousands)

+ " thousand ";

}

result = result + tradHundredThousands;

String tradThousand;

tradThousand = convertLessThanOneThousand(thousands);

result = result + tradThousand;

// remove extra spaces!

return result.replaceAll("^\\s+", "").replaceAll("\\b\\s{2,}\\b", " ");

}

/**

* testing

* @param args

*/

public static void main(String[] args) {

Scanner sc= new Scanner(System.in);

System.out.println("Please enter a number: ");

long number= sc.nextInt();

System.out.println("*** " + Saymynumber.convert(number));

}

}

OUTPUT:

Please enter a number:

52346647

l*** fifty two million three hundred forty six hundred forty seven

Add a comment
Know the answer?
Add Answer to:
New answers only outcomes for this lab: Recursive concepts Uses for recursion Infinite recursion Problem solving...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT