esta hecho en c++ porque me era mas comodo usar el AnsiString (String)
cualquier duda o sugerencia enviar a
[email protected]
String ConvertInt(int num)
{
String txt="";
if(num<=3999)
{
while(num>=1000){num-=1000;txt+="M";}
while(num>=900) {num-=900; txt+="CM";}
while(num>=500) {num-=500; txt+="D";}
while(num>=400) {num-=400; txt+="CD";}
while(num>=100) {num-=100; txt+="C";}
while(num>=90) {num-=90; txt+="XC";}
while(num>=50) {num-=50; txt+="L";}
while(num>=40) {num-=40; txt+="XL";}
while(num>=10) {num-=10; txt+="X";}
while(num>=9) {num-=9; txt+="IX";}
while(num>=5) {num-=5; txt+="V";}
while(num>=4) {num-=4; txt+="IV";}
while(num>=1) {num-=1; txt+="I";}
return txt;
}
else
// desarrollado por aek (
[email protected])
return "Out of Range";
};
int ConvertRom(String txt)
{
int last=0;
int num=0;
for(int i=1;i<txt.Length();i++)
{
if(txt[i]=='M'){num+=1000;last=1;}
else
if(txt[i]=='D'){num+=500;last=2;}
else
if(txt[i]=='C'){
if(txt[i+1]=='M'){num+=900;i++;last=3;}
else
if(txt[i+1]=='D'){num+=400;i++;last=4;}
else
{num+=100;last=5;}
}else
if(txt[i]=='L'){num+=50;last=6;}
else
if(txt[i]=='X'){
if(txt[i+1]=='C'){num+=90;i++;last=7;}
else
if(txt[i+1]=='L'){num+=40;i++;last=8;}
else
{num+=10;last=9;}
}
else
if(txt[i]=='V'){num+=5;last=10;}
else
if(txt[i]=='I'){
if(txt[i+1]=='X'){num+=9;i++;last=11;}
else
if(txt[i+1]=='V'){num+=4;i++;last=12;}
else
{num+=1;last=13;}
}else
return -1;
}
if(last!=3 && last!=4 && last!=7 && last!=8 && last!=11 && last!=12){
int i=txt.Length();
if(txt[i]=='M' && last<=1) num+=1000; else
if(txt[i]=='D' && last<=2) num+=500; else
if(txt[i]=='C' && last<=5) num+=100; else
if(txt[i]=='L' && last<=6) num+=50; else
if(txt[i]=='X' && last<=9) num+=10; else
if(txt[i]=='V' && last<=10) num+=5; else
if(txt[i]=='I' && last<=13) num+=1; else
return -1;
}
// desarrollado por aek (
[email protected])
if(txt!=ConvertInt(num))
return -1;
return num;
};