bytefold
Thursday, 8 November 2012
Convert Amount In Words
A simple problem is to convert the given amount in words for receipt or other bills related usage.
import java.util.*; public class AmountInWords { private static String amount; private static int num; private static String[] units={""," One"," Two"," Three"," Four"," Five"," Six"," Seven"," Eight"," Nine"}; private static String[] teen={" Ten"," Eleven"," Twelve"," Thirteen"," Fourteen"," Fifteen"," Sixteen"," Seventeen"," Eighteen"," Nineteen"}; private static String[] tens={" Twenty"," Thirty"," Fourty"," Fifty"," Sixty"," Seventy"," Eighty"," Ninety"}; private static String[] maxs={"",""," Hundred"," Thousand"," Lakh"," Crore"}; public AmountInWords() { amount=""; } public String convertToWords(int n) { amount=numToString(n); String converted=""; int pos=1; boolean hun=false; while(amount.length()>0) { if(pos==1) // TENS AND UNIT POSITION { if(amount.length()>=2) // 2DIGIT NUMBERS { String C=amount.substring(amount.length()-2,amount.length()); amount=amount.substring(0,amount.length()-2); converted+=digits(C); } else if(amount.length()==1) // 1 DIGIT NUMBER { converted+=digits(amount); amount=""; } pos++; // INCREASING POSITION COUNTER } else if(pos==2) // HUNDRED POSITION { String C=amount.substring(amount.length()-1,amount.length()); amount=amount.substring(0,amount.length()-1); if(converted.length()>0&&digits(C)!=""){ converted=(digits(C)+maxs[pos]+" and")+converted;hun=true; } else{ if(digits(C)=="") ; else converted=(digits(C)+maxs[pos])+converted;hun=true;} pos++; // INCREASING POSITION COUNTER } else if(pos>2) // REMAINING NUMBERS PAIRED BY TWO { if(amount.length()>=2) // EXTRACT 2 DIGITS { String C=amount.substring(amount.length()-2,amount.length()); amount=amount.substring(0,amount.length()-2); if(!hun&&converted.length()>0)converted=digits(C)+maxs[pos]+" and"+converted; else{ if(digits(C)=="") ; else converted=digits(C)+maxs[pos]+converted; } } else if(amount.length()==1) // EXTRACT 1 DIGIT { if(!hun&&converted.length()>0)converted=digits(amount)+maxs[pos]+" and"+converted; else{ if(digits(amount)=="") ; else converted=digits(amount)+maxs[pos]+converted; amount=""; } } pos++; // INCREASING POSITION COUNTER } } return converted; } private String digits(String C) // TO RETURN SELECTED NUMBERS IN WORDS { String converted=""; for(int i=C.length()-1;i>=0;i--) { int ch=C.charAt(i)-48; if(i==0&&ch>1&&C.length()>1) converted=tens[ch-2]+converted; // IF TENS DIGIT STARTS WITH 2 OR MORE IT FALLS UNDER TENS else if(i==0&&ch==1&&C.length()==2) // IF TENS DIGIT STARTS WITH 1 IT FALLS UNDER TEENS { int sum=0; for(int j=0;j<2;j++) sum=(sum*10)+(C.charAt(j)-48); return teen[sum-10]; } else{ if(ch>0)converted=units[ch]+converted; } // IF SINGLE DIGIT PROVIDED } return converted; } private String numToString(int n) // CONVERT THE NUMBER TO STRING { String num=""; while(n!=0) { num=((char)((n%10)+48))+num; n/=10; } return num; } private void input() { Scanner in=new Scanner(System.in); try{System.out.print("Enter Amount to Convert in Words : "); num=in.nextInt();}catch(Exception e){System.out.println("Number Less than 1 Arab(1000000000) Only Possible.");System.exit(1);} } public static void main(String[] args) { AmountInWords obj=new AmountInWords(); obj.input(); System.out.println("Amount in Words : "+obj.convertToWords(num)); } }
No comments:
Post a Comment
Newer Post
Older Post
Home
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment