Scrivi un programma Java per convertire i numeri in parole?

Grazie per la A2A Shravani G.

Il seguente codice ti aiuterà.

pacchetto com.ashok.java.examples;

import java.util.InputMismatchException;
import java.util.Scanner;

classe pubblica NumberToWord {
stringa statica privata privata [] SPECIALNAMES = {“”, “mila”, “milione”, “miliardi”, “trilioni”, “quadrilioni”,
“quintillion”};

stringa statica privata privata [] TENSNAMES = {“”, “ten”, “twenty”, “enta “,” quaranta “,” cinquanta “,” sessanta “,
“settanta”, “ottanta”, “novanta”};

stringa statica privata privata [] NUMBERNAMES = {“”, “one”, “two”, “three”, “four”, “five”, “six”, “seven”,
“otto”, “nove”, “dieci”, “undici”, “dodici”, “tredici”, “quattordici”, “quindici”, “sedici”,
“diciassette”, “diciotto”, “diciannove”};

private String convertLessThanOneThousand (numero int) {
Corrente di stringa;

if (numero% 100 <20) {
corrente = NUMBERNAMES [numero% 100];
numero / = 100;
} altro {
corrente = NUMBERNAMES [numero% 10];
numero / = 10;

corrente = TENSNAMES [numero% 10] + corrente;
numero / = 10;
}
if (numero == 0)
corrente di ritorno;
restituisce NUMBERNAMES [numero] + “cento” + corrente;
}

Converti stringa pubblica (numero int) {
if (numero == 0) {
ritorna “zero”;
}

Prefisso stringa = “”;

if (numero <0) {
numero = -numero;
prefisso = “-“;
}

String current = “”;
int place = 0;

fare {
int n = numero% 1000;
if (n! = 0) {
String s = convertLessThanOneThousand (n);
current = s + SPECIALNAMES [posto] + corrente;
}
posizionare ++;
numero / = 1000;
} while (numero> 0);

return (prefisso + corrente) .trim ();
}

public static void main (String [] args) {
Scansione scanner = null;
NumberToWord obj = null;
provare {
obj = new NumberToWord ();
scan = new Scanner (System.in);
System.out.print (“Immettere un numero qualsiasi:”);
System.out.println (“Numero in parola:” + obj.convert (scan.nextInt ()));
} catch (InputMismatchException e) {
System.out.println (“Inserire solo numeri … !!”);
} catch (Exception e) {
e.printStackTrace ();
} infine {
if (null! = scan) {
scan.close ();
}
}
}
}

Produzione
Caso 1:
Immettere un numero qualsiasi: 098765
Numero in parola: novantotto mila settecentosessantacinque

Caso 2:
Immettere un numero qualsiasi: -89564
Numero in parola: – ottantamila cinquecentosessanta quattro

Caso 3:
Inserisci un numero qualsiasi: ashok
Si prega di inserire solo numeri…!!

Spero che questa volontà ti aiuti. Buona programmazione … !!

Grazie

Modo per imparare facilmente

Interpreterò la tua domanda come “Come scriveresti un programma per convertire numeri naturali in parole?”.

Vorrei andare nel modo TDD:

  1. Scrivi un test per 1 (“One”)
  2. Implementa una funzione che soddisfi il tuo test
  3. Scrivi un test per 2 (“Due”)
  4. Rifattorizza la tua funzione in modo che entrambi i test siano soddisfatti e che il tuo codice rimanga mantenibile (evitare la duplicazione del codice, metodi lunghi, mantenere basso il numero di righe di codice, mantenere il codice leggibile, …)
  5. Scrivi test per tutti i numeri fino a 19
  6. Refactor …
  7. Scrivi test per 20, 30, 40, 50, 60, 70, 80, 90
  8. Refactor …
  9. Scrivi test per alcuni numeri casuali tra 21 e 99 (21, 32, 43, 54, 65, 76, 87, 98)
  10. Refactor … (ignora che conosci i numeri che hai scelto di testare nel passaggio precedente)
  11. Scrivi test per alcuni numeri casuali tra 100 e 999
  12. Refactor …

A seconda dei criteri di accettazione, dovrai continuare con questo ciclo fino a raggiungere il numero più alto che devi supportare.

Al termine: aggiungi un parametro aggiuntivo per scegliere la lingua / il formato di output:

  • inglese
  • Tedesco (l’ordine del numero “sbagliato” anche tra venti e 99: 21 è “einundzwanzig” – “oneandtwenty”, 78 è “achtundsiebzig” – “eightandseventy”)
  • Francese (alcuni numeri abbastanza interessanti: 70 è “soixante-dix” che è “sessantacinque”, 80 è “quatrevingt” = “fourtwenty” e 95 è “quatrevingtquinze” = “fourtwentyfifteen”)
  • Numeri romani
  • ….

Che grandi compiti! Divertiti!

Ecco un buon esempio di libreria che ho scritto per convertire numeri in parole (fino a quadrilioni) improsoft / n2w (github), Le lingue attualmente disponibili sono Java e C ++ al momento della stesura di questo .

Attualmente lo sto ancora implementando in altre lingue diverse e attualmente lo ho implementato in un’app Android qui N2W – Convertitore da numero a parola – App Android su Google Play. Happy Coding 🙂

Non è poi così difficile. Un pseudo codice.

Se n è 0, output zero.

Se n è negativo, imposta un valore booleano per indicarlo.

Impostare n sul valore assoluto di n.

Crea una matrice di stringhe.

Mentre n> 0

d = n% 10

S = digitstrings [0]

Aggiungi S alla matrice di stringhe

n = n / 10

Fine

Ora inverti le stringhe e decora con le stringhe di posizione delle cifre. Assicurati di rendere correttamente conto degli zeri …

Ho creato la logica per numero a parola il più breve e semplice possibile, dai un’occhiata:

public static final String [] UNITPLACE = {“”, “ONE”, “TWO”, “THREE”, “FOUR”, “FIVE”, “SIX”, “SEVEN”, “EIGHT”, “NINE”, “TEN “,” ELEVEN “,” TWELVE “,” THEDTEEN “,” FOURTEEN “,” FIVETEEN “,” SIXTEEN “,” SEVENTEEN “,” EIGHTEEN “,” NINETEEN “};

public static final String [] TENPLACE = {“”, “TWENTY”, “THIRTY”, “FOURTY”, “FIVETY”, “SIXTY”, “SEVENTY”, “EIGHTY”, “NINETY”};

public static final String [] MOREPLACE = {“”, “HUNDRED”, “THOUSAND”, “LAKH”, “CRORE”, “ARAB”, “KHARAB”, “NIL”, “PADM”, “SANKH”, “MAHA SANKH “};
// Chiama questa funzione dal metodo principale e passa no, digit = 0, len = 0
numero vuoto statico pubblicoSplit (long no, int digit, int len) {
if (no> 0) {
if (len == 2)
numberSplit (no / 10, (int) (no% 10), len + 1);
altro
numberSplit (no / 100, (int) (no% 100), len + 2);
}
if (cifra> 0)
wordPrint (digit, len);
}
public static void wordPrint (int digit, int len) {
if (cifra <20)
System.out.print (UNITPLACE [cifre]);
altro {

System.out.print (TENPLACE [(digit / 10) – 1]);

if (cifra% 10! = 0)
System.out.print (UNITPLACE [digit% 10]);
}
if (len> 2)
System.out.print (MOREPLACE [len / 2]);
}
public static void main (String [] args) {
Scanner sc = nuovo scanner (System.in);
long no = sc.nextLong ();
numberSplit (no, 0,0);
System.out.print ( “solo”);
}