Sunday, February 24, 2008

How to convert number to words

During my oracle interview i was asked to write a program which converts a number to its word representation. I am sharing a simple code that does that:
/**
* This class converts a number to its word representation
* @author Gopal Patel
*
*/
public class NumberToWordConvertor {
//String to formulate the required word representation
private String string;
private String SPACE=" ";

private String a[] = { "", "one", "two", "three", "four", "five", "six", "seven",
"eight", "nine", };
private String b[] = { "hundred", "thousand", "lakh", "crore" };
private String c[] = { "ten", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen", "ninteen", };
private String d[] = {
"twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty",
"ninty" };
/**
* This method converts the passed number to its word representation
* @param numberToBeConverted
* @return converted number in words
*/
public String convertPassedNumberToWord(int numberToBeConverted) {

int counter = 1;
int current;
string = "";
if (numberToBeConverted == 0) {
string = "zero";
}
while (numberToBeConverted != 0) {
switch (counter) {
case 1:
current = numberToBeConverted % 100;
currentNumber(current);
if (numberToBeConverted > 100 && numberToBeConverted % 100 != 0) {
show("and ");
}
numberToBeConverted /= 100;
break;
case 2:
current = numberToBeConverted % 10;
if (current != 0) {
show(SPACE);
show(b[0]);
show(SPACE);
currentNumber(current);
}
numberToBeConverted /= 10;
break;
case 3:
current = numberToBeConverted % 100;
if (current != 0) {
show(SPACE);
show(b[1]);
show(SPACE);
currentNumber(current);
}
numberToBeConverted /= 100;
break;
case 4:
current = numberToBeConverted % 100;
if (current != 0) {
show(SPACE);
show(b[2]);
show(SPACE);
currentNumber(current);
}
numberToBeConverted /= 100;
break;
case 5:
current = numberToBeConverted % 100;
if (current != 0) {
show(SPACE);
show(b[3]);
show(SPACE);
currentNumber(current);
}
numberToBeConverted /= 100;
break;
}
counter++;
}
return string;
}
public void currentNumber(int number) {
int x, y;
if (number < 10) {
show(a[number]);
}
if (number > 9 && number < 20) {
show(c[number - 10]);
}
if (number > 19) {
x = number % 10;
if (x == 0) {
y = number / 10;
show(d[y - 2]);
} else {
y = number / 10;
show(a[x]);
show(" ");
show(d[y - 2]);
}
}
}
public void show(String s) {
String t;
t = string;
string = s;
string += t;
}
public static void main(String args[]) {
NumberToWordConvertor numberToWordConvertor = new NumberToWordConvertor();
System.out.println("99999999: in words is -> "+ numberToWordConvertor.convertPassedNumberToWord(99999999));
System.out.println("0: in words is -> " + numberToWordConvertor.convertPassedNumberToWord(0));
System.out.println("65234: in words is -> " + numberToWordConvertor.convertPassedNumberToWord(65234));
System.out.println("45: in words is -> " + numberToWordConvertor.convertPassedNumberToWord(45));
System.out.println("3532: in words is -> " + numberToWordConvertor.convertPassedNumberToWord(3532));
System.out.println("654642345: in words is -> "+ numberToWordConvertor.convertPassedNumberToWord(654642345));
System.out.println("245: in words is -> "+ numberToWordConvertor.convertPassedNumberToWord(245));
System.out.println("345000: in words is -> "+ numberToWordConvertor.convertPassedNumberToWord(345000));
System.out.println("2355440: in words is -> "+ numberToWordConvertor.convertPassedNumberToWord(2355440));
System.out.println("165535001: in words is -> "+ numberToWordConvertor.convertPassedNumberToWord(165535001));
}
}