user@pc:~$ javac SpellNumber.java
user@pc:~$ java -jar SpellNumber
Please input a decimal number(0 to exit):
2043543697
Two Hundred Four Crore Thirty Five Lac Forty Three Thousand Six Hundred Ninety Seven
Please input a decimal number(0 to exit):
2000040001
Two Hundred Crore Forty Thousand One
Please input a decimal number(0 to exit):
500060023
Fifty Crore Sixty Thousand Twenty Three
Please input a decimal number(0 to exit):
0
Zero. Exiting...
/*
1 crore = 100 lac
1 lac = 100 thousand
1 thousand = 10 hundred
*/
public class SpellNumber{
static long num;
static final int DIGIT_LIMIT=20;
static String spellNum[]=new String[100];
static String tys[]=new String[10];
static String positions[]=new String[DIGIT_LIMIT];
static String scale[]={"","hundred","thousand1","thousand2", "lac1", "lac2", "crore1", "crore2"};
static int digits[]=new int[DIGIT_LIMIT];
static String spellDigits(int twoDgt){
if(spellNum[twoDgt] != null) return spellNum[twoDgt];
int firstDigit=twoDgt%10;
twoDgt=twoDgt/10;
int secondDigit=twoDgt;
String out="";
out=tys[secondDigit]+" ";
out=out+spellNum[firstDigit];
return out;
}
public static void main(String[] args) {
for(;;){
System.out.println("Please input a decimal number(0 to exit):");
num=new java.util.Scanner(System.in).nextLong();
if(num==0) {
System.out.println("Zero. Exiting...");
break;
}
positions[1]=".1";
positions[2]=".2";
int scaleIndex=1;
for(int i=3;i<DIGIT_LIMIT;i++){
positions[i]=scale[scaleIndex];
scaleIndex=scaleIndex%7+1;
}
spellNum[1]="One";
spellNum[2]="Two";
spellNum[3]="Three";
spellNum[4]="Four";
spellNum[5]="Five";
spellNum[6]="Six";
spellNum[7]="Seven";
spellNum[8]="Eight";
spellNum[9]="Nine";
spellNum[10]="Ten";
spellNum[11]="Eleven";
spellNum[12]="Twelve";
spellNum[13]="Thirteen";
spellNum[14]="Forteen";
spellNum[15]="Fifteen";
spellNum[16]="Sixteen";
spellNum[17]="Seventeen";
spellNum[18]="Eighteen";
spellNum[19]="Nineteen";
spellNum[20]="Twenty";
spellNum[30]="Thirty";
spellNum[40]="Forty";
spellNum[50]="Fifty";
spellNum[60]="Sixty";
spellNum[70]="Seventy";
spellNum[80]="Eighty";
spellNum[90]="Ninety";
tys[2]="Twenty";
tys[3]="Thirty";
tys[4]="Forty";
tys[5]="Fifty";
tys[6]="Sixty";
tys[7]="Seventy";
tys[8]="Eighty";
tys[9]="Ninety";
long tmpNum=num;
int count=1;
for(;tmpNum!=0;){
digits[count]=(int)tmpNum%10;
tmpNum=tmpNum/10;
count=count+1;
}
count--;
int outDigits[]=new int[DIGIT_LIMIT];
String outScales[]=new String[DIGIT_LIMIT];
int outDigitCount=0;
int outScaleCount=0;
int bufferDigit=0;
String bufferScale;
for(int i=count;i>0;i--){
switch(positions[i]){
case "hundred":
outDigits[outDigitCount++]=digits[i];
outScales[outScaleCount++]="Hundred";
break;
case "crore2":
bufferDigit=digits[i];bufferScale="Crore";
break;
case "crore1":
outDigits[outDigitCount++]=bufferDigit*10+digits[i];
outScales[outScaleCount++]="Crore";
bufferDigit=0;bufferScale=null;
break;
case "lac2":
bufferDigit=digits[i];bufferScale="Lac";
break;
case "lac1":
outDigits[outDigitCount++]=bufferDigit*10+digits[i];
outScales[outScaleCount++]="Lac";
bufferDigit=0;bufferScale=null;
break;
case "thousand2":
bufferDigit=digits[i];bufferScale="Thousand";
break;
case "thousand1":
outDigits[outDigitCount++]=bufferDigit*10+digits[i];
outScales[outScaleCount++]="Thousand";
bufferDigit=0;bufferScale=null;
break;
default:
}
}
String result="";
String lastScale=null;
String ranks="Hundred Thousand Lac Crore";
for(int i=0;i<outDigitCount;i++){
if(outDigits[i]==0 && lastScale != null) {
if(ranks.indexOf(outScales[i]) > ranks.indexOf(lastScale))
result=result+outScales[i]+" ";
lastScale=outScales[i];
continue;
}
if(outDigits[i]==0 && lastScale == null) {
result=result+outScales[i]+" ";
lastScale=outScales[i];
continue;
}
if(outDigits[i]!=0) {
result=result+spellDigits(outDigits[i])+" ";
result=result+outScales[i]+" ";
lastScale=outScales[i];
}
}
if(digits[2]*10+digits[1] != 0)
result=result+spellDigits(digits[2]*10+digits[1]);
System.out.println(result);
}
}
}
No comments:
Post a Comment