Forum - C/C++
- Aiuto!!!!
Mat87 (Normal User)
Newbie
Messaggi: 4
Iscritto: 22/09/2009
ciao a tutti!! dovrei fare una funzione che traduce un numero romano in lettera, es:
II -> secondo non so da che parte cominciare, qualcuno sa darmi una mano???
Qualunque consiglio è ben accetto. Grazie!!
LittleHacker (Member )
Guru
Messaggi: 1033
Iscritto: 28/04/2009
Postato originariamente da Mat87 :
ciao a tutti!! dovrei fare una funzione che traduce un numero romano in lettera, es:
II -> secondo non so da che parte cominciare, qualcuno sa darmi una mano???
Qualunque consiglio è ben accetto. Grazie!!
Beh potresti fare:
Codice sorgente - presumibilmente C/C++
void converti(char numero_romano, char numero_arabo)
{
if(numero_romano == "I")
{
numero_arabo = "1";
}
return numero_arabo;
}
e così via...però mi sembra un pò complicata la faccenda perchè ad ogni numero romano poi devi corrispondegli un numero...aspetta che cerco un pò...
Ultima modifica effettuata da LittleHacker il 28/09/2009 alle 17:04
LittleHacker (Member )
Guru
Messaggi: 1033
Iscritto: 28/04/2009
Ecco qui è fatto con visual c++:
Codice sorgente - presumibilmente C#
class NumeriRomani {
/*
* Questa funzione converte un numero decimale in un numero romano
*
* I = 1
* II = 2
* III = 3
* IV = 4
* V = 5
* X = 10
* L = 50
* C = 100
* D = 500
* M = 1000
*
* */
public static String converti( int numeroDaConvertire) {
int numeroM = 0 ;
int numeroD = 0 ;
int numeroC = 0 ;
int numeroL = 0 ;
int numeroX = 0 ;
int numeroV = 0 ;
int numeroI = 0 ;
int resto;
int i;
String numeroRomano = "" ;
//quante M
numeroM = numeroDaConvertire/ 1000 ;
resto = numeroDaConvertire% 1000;
//quante D
numeroD = resto/ 500 ;
resto = resto% 500;
//quante C
numeroC = resto/ 100 ;
resto = resto% 100;
//quante L
numeroL = resto/ 50 ;
resto = resto% 50;
//quante X
numeroX = resto/ 10 ;
resto = resto% 10;
//quante V
numeroV = resto/ 5 ;
resto = resto% 5;
//quante I
numeroI = resto;
for ( i= 0 ; i< numeroM; i++ ) {
numeroRomano = numeroRomano+ "M" ;
}
//ci può stare al massimo una D
if ( numeroD > 0 ) {
numeroRomano = numeroRomano+ "D" ;
}
//centinaia
if ( numeroC> 3 && numeroC != 0 ) {
numeroRomano = numeroRomano+ "CD" ; //400
} else
for ( i= 0 ; i< numeroC; i++ )
numeroRomano = numeroRomano+ "C" ;
//ci può stare al massimo una L
if ( numeroL > 0 ) {
numeroRomano = numeroRomano+ "L" ;
}
//decine
if ( numeroX> 3 && numeroX != 0 ) {
numeroRomano = numeroRomano+ "XL" ; //40
} else
for ( i= 0 ; i< numeroX; i++ )
numeroRomano = numeroRomano+ "X" ;
//ci può stare al massimo una V
if ( numeroV > 0 ) {
numeroRomano = numeroRomano+ "V" ;
}
//unità
if ( numeroI> 3 && numeroI != 0 ) {
numeroRomano = numeroRomano+ "IV" ; //4
} else
for ( i= 0 ; i< numeroI; i++ )
numeroRomano = numeroRomano+ "I" ;
return numeroRomano;
}
public static void main( String [ ] args) {
String numeroRomano = converti( 1444) ;
System .out .println ( numeroRomano) ;
}
}
Molto più facile questo:
Codice sorgente - presumibilmente C#
string numeri_romani( unsigned int x)
{
struct cifra {
unsigned int num;
string str;
} ;
cifra vett[ ] = { { 1000 , "M" } , { 900 , "CM" } , { 500 , "D" } , { 400 , "CD" } ,
{ 100 , "C" } , { 90 , "XC" } , { 50 , "L" } , { 40 , "XL" } ,
{ 10 , "X" } , { 9 , "IX" } , { 5 , "V" } , { 4 , "IV" } , { 1 , "I" } } ;
if ( x == 0)
return "0" ;
string str = "" ;
int i = 0 ;
while ( x > 0)
{
if ( ( x / vett[ i] .num ) == 0)
++ i;
else
{
str += vett[ i] .str ;
x -= vett[ i] .num ;
}
}
return str;
}
Ultima modifica effettuata da LittleHacker il 28/09/2009 alle 17:06
Mat87 (Normal User)
Newbie
Messaggi: 4
Iscritto: 22/09/2009
Ciao,scusate, forse non mi sono spiegato bene.... io dovrei convertire un NUMERO ROMANO(V) in LETTERE(Quinto). comunque utilizzo codice c++.
Grazie mille per le risposte comunque. Se mi sapete dire di più mi sareste di grande aiuto
LittleHacker (Member )
Guru
Messaggi: 1033
Iscritto: 28/04/2009
Da cifre romane a parole si che si può...ho visto un topic in questo sito e in questa sezione utilizza la funzione cerca del sito...