Skip to content

Instantly share code, notes, and snippets.

@nkitku
Created September 19, 2021 12:57
Show Gist options
  • Save nkitku/49de33f291a41e879d79f692525aefff to your computer and use it in GitHub Desktop.
Save nkitku/49de33f291a41e879d79f692525aefff to your computer and use it in GitHub Desktop.
Number To Words in Java (Hindi, Indian, International)
import java.time.Duration;
import java.time.Instant;
final class N2WHindi {
// "शून्य"
private static final String[] zeroTo99 = { "", "एक", "दो", "तीन", "चार", "पाँच", "छः", "सात", "आठ", "नौ", "दश",
"ग्यारह", "बारह", "तेरह", "चौदह", "पन्द्रह", "सोलह", "सत्रह", "अठारह", "उन्नीस", "बीस", "इक्कीस", "बाईस",
"तेईस", "चौबीस", "पच्चीस", "छब्बीस", "सत्ताईस", "अट्ठाईस", "उनतीस", "तीस", "इकतीस", "बत्तीस", "तैंतीस",
"चौंतीस", "पैंतीस", "छत्तीस", "सैंतीस", "अड़तीस", "उनतालीस", "चालीस", "इकतालीस", "बयालीस", "तैंतालीस",
"चौवालीस", "पैंतालीस", "छियालीस", "सैंतालीस", "अड़तालीस", "उनचास", "पचास", "इक्यावन", "बावन", "तिरपन",
"चौवन", "पचपन", "छप्पन", "सत्तावन", "अट्ठावन", "उनसठ", "साठ", "इकसठ", "बासठ", "तिरसठ", "चौंसठ", "पैंसठ",
"छियासठ", "सड़सठ", "अड़सठ", "उनहत्तर", "सत्तर", "इकहत्तर", "बहत्तर", "तिहत्तर", "चौहत्तर", "पचहत्तर",
"छिहत्तर", "सतहत्तर", "अठहत्तर", "उन्यासी", "अस्सी", "इक्यासी", "बयासी", "तिरासी", "चौरासी", "पचासी",
"छियासी", "सत्तासी", "अट्ठासी", "नवासी", "नब्बे", "इक्यानबे", "बानबे", "तिरानबे", "चौरानबे", "पंचानबे",
"छियानबे", "सत्तानबे", "अट्ठानबे", "निन्यान्बे" };
private static final String[] place = { "हज़ार", "लाख", "करोड़", "अरब", "खरब", "नील" };
public static String convert(String x) {
int n = x.length();
x = n == 0 ? "00" : n == 1 || n % 2 == 0 ? "0" + x : x;
n = x.length();
String r = N2WHindi.zeroTo99[x.charAt(n -= 2) * 10 + x.charAt(n + 1) - 528];
if (n > 0) {
String v = N2WHindi.zeroTo99[x.charAt(n -= 1) - 48];
if (v.length() > 0) {
r = v + " सौ " + r;
}
}
for (int i = 0; n > 0; i++) {
String v = N2WHindi.zeroTo99[x.charAt(n -= 2) * 10 + x.charAt(n + 1) - 528];
if (v.length() > 0) {
r = v + " " + N2WHindi.place[i] + " " + r;
}
}
return r;
}
public static void test() {
final Instant start = Instant.now();
int n = 5000000;
final String test = "1234567890";
while (n-- > 0) {
N2WHindi.convert(test);
}
final Instant finish = Instant.now();
final long timeElapsed = Duration.between(start, finish).toMillis();
System.out.println("1234567890 to 5 Million times: " + timeElapsed + "ms");
System.out.println("10^16 -1 :\n" + "9".repeat(15) + "\n" + N2WHindi.convert("9".repeat(15)));
}
}
final class N2WIndian {
private static final String[] zeroTo99 = new String[100];
private static final String[] place = { "Thousand", "Lakh", "Crore", "Arab", "Kharab", "Nil" };
static {
final String[] ones = { "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten",
"Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };
final String[] tens = { "", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };
for (int i = 0; i < 100; i++) {
final int t = i / 10;
final int o = i % 10;
N2WIndian.zeroTo99[i] = t < 2 ? ones[i] : tens[t] + (o == 0 ? "" : (" " + ones[o]));
}
}
public static String convert(String x) {
int n = x.length();
x = n == 0 ? "00" : n == 1 || n % 2 == 0 ? "0" + x : x;
n = x.length();
String r = N2WIndian.zeroTo99[x.charAt(n -= 2) * 10 + x.charAt(n + 1) - 528];
if (n >= 1) {
String v = N2WIndian.zeroTo99[x.charAt(n -= 1) - 48];
if (v.length() > 0) {
r = v + " Hundred " + r;
}
}
for (int i = 0; n > 0; i++) {
String v = N2WIndian.zeroTo99[x.charAt(n -= 2) * 10 + x.charAt(n + 1) - 528];
if (v.length() > 0) {
r = v + " " + N2WIndian.place[i] + " " + r;
}
}
return r;
}
public static void test() {
final Instant start = Instant.now();
int n = 5000000;
final String test = "1234567890";
while (n-- > 0) {
N2WIndian.convert(test);
}
final Instant finish = Instant.now();
final long timeElapsed = Duration.between(start, finish).toMillis();
System.out.println("1234567890 to 5 Million times: " + timeElapsed + "ms");
System.out.println("10^16 -1 :\n" + "9".repeat(15) + "\n" + N2WIndian.convert("9".repeat(15)));
}
}
final class N2WIntl {
private static final String[] zeroTo999 = new String[1000];
private static final String[] place = { "", "Thousand", "Million", "Billion", "Trillion", "Quadrillion",
"Quintillion", "Sextillion", "Septillion", "Octillion", "Nonillion", "Decillion", "Undecillion",
"Duodecillion", "Tredecillion", "Quattuordecillion", "Quindecillion", "Sedecillion", "Septendecillion",
"Octodecillion", "Novendecillion", "Vigintillion", "Unvigintillion", "Duovigintillion", "Tresvigintillion",
"Quattuorvigintillion", "Quinvigintillion", "Sesvigintillion", "Septemvigintillion", "Octovigintillion",
"Novemvigintillion", "Trigintillion", "Untrigintillion", "Duotrigintillion", "Trestrigintillion",
"Quattuortrigintillion", "Quintrigintillion", "Sestrigintillion", "Septentrigintillion",
"Octotrigintillion", "Noventrigintillion", "Quadragintillion" };
static {
final String[] ones = { "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten",
"Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };
final String[] tens = { "", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };
for (int i = 0; i < 100; i++) {
final int t = i / 10;
final int o = i % 10;
N2WIntl.zeroTo999[i] = t < 2 ? ones[i] : tens[t] + (o == 0 ? "" : (" " + ones[o]));
}
for (int i = 100; i < 1000; i++) {
final int h = i / 100;
final int t = i / 10 % 10;
final int o = i % 10;
final String r = N2WIntl.zeroTo999[h] + " Hundred";
N2WIntl.zeroTo999[i] = t == 0 && o == 0 ? r : r + " " + N2WIntl.zeroTo999[t * 10 + o];
}
}
public static String convert(String x) {
int n = x.length();
x = n == 0 ? "000" : "0".repeat((3 - n % 3) % 3) + x;
n = x.length();
String r = "";
for (int i = 0; n > 0; i++) {
final String v = N2WIntl.zeroTo999[x.charAt(n -= 3) * 100 + x.charAt(n + 1) * 10 + x.charAt(n + 2) - 5328];
if (v.length() > 0) {
r = v + " " + N2WIntl.place[i] + " " + r;
}
}
return r;
}
public static void test() {
final Instant start = Instant.now();
int n = 5000000;
final String test = "1234567890";
while (n-- > 0) {
N2WIntl.convert(test);
}
final Instant finish = Instant.now();
final long timeElapsed = Duration.between(start, finish).toMillis();
System.out.println("1234567890 to 5 Million times: " + timeElapsed + "ms");
System.out.println("10^127 -1 :\n" + "9".repeat(126) + "\n" + N2WIntl.convert("9".repeat(126)));
}
}
final class N2W {
public static void main(String[] args) throws Exception {
N2WHindi.test();
N2WIndian.test();
N2WIntl.test();
N2WHindi.test();
N2WIndian.test();
N2WIntl.test();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment