Oppure

Loading
28/09/09 14:41
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!!
aaa
28/09/09 14:58
LittleHacker
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:
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ò...:k:
Ultima modifica effettuata da LittleHacker 28/09/09 15:04
aaa
28/09/09 15:03
LittleHacker
Ecco qui è fatto con visual 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);
}
}

:k:

Molto più facile questo:
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 28/09/09 15:06
aaa
28/09/09 15:38
Mat87
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
:)
aaa
28/09/09 15:59
LittleHacker
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...:k:
aaa