1、整数转罗马数
暴力的很……自己写的代码简直没眼看
char* intToRoman(int num) {
char *r=(char*)malloc(sizeof(int)* (16));
int i = 0;
if(num/1000 > 0)
{
switch(num/1000)
{
case 1: r[i]='M';i++;break;
case 2: r[i]='M';i++;r[i]='M';i++;break;
case 3: r[i]='M';i++;r[i]='M';i++;r[i]='M';i++;break;
}
num = num%1000;
}
if(num/100 > 0)
{
switch(num/100)
{
case 1:
r[i]='C';i++;break;
case 2:
r[i]='C';i++;r[i]='C';i++;break;
case 3:
r[i]='C';i++;r[i]='C';i++;r[i]='C';i++;break;
case 4:
r[i]='C';i++;r[i]='D';i++;break;
case 5:
r[i]='D';i++;break;
case 6:
r[i]='D';i++;r[i]='C';i++;break;
case 7:
r[i]='D';i++;r[i]='C';i++;r[i]='C';i++;break;
case 8:
r[i]='D';i++;r[i]='C';i++;r[i]='C';i++;r[i]='C';i++;break;
case 9:
r[i]='C';i++;r[i]='M';i++;break;
}
num = num%100;
}
if(num/10>0)
{
switch(num/10)
{
case 1:
r[i]='X';i++;break;
case 2:
r[i]='X';i++;r[i]='X';i++;break;
case 3:
r[i]='X';i++;r[i]='X';i++;r[i]='X';i++;break;
case 4:
r[i]='X';i++;r[i]='L';i++;break;
case 5:
r[i]='L';i++;break;
case 6:
r[i]='L';i++;r[i]='X';i++;break;
case 7:
r[i]='L';i++;r[i]='X';i++;r[i]='X';i++;break;
case 8:
r[i]='L';i++;r[i]='X';i++;r[i]='X';i++;r[i]='X';i++;break;
case 9:
r[i]='X';i++;r[i]='C';i++;break;
}
num = num%10;
}
if(num>0)
{
switch(num)
{
case 1:
r[i]='I';i++;break;
case 2:
r[i]='I';i++;r[i]='I';i++;break;
case 3:
r[i]='I';i++;r[i]='I';i++;r[i]='I';i++;break;
case 4:
r[i]='I';i++;r[i]='V';i++;break;
case 5:
r[i]='V';i++;break;
case 6:
r[i]='V';i++;r[i]='I';i++;break;
case 7:
r[i]='V';i++;r[i]='I';i++;r[i]='I';i++;break;
case 8:
r[i]='V';i++;r[i]='I';i++;r[i]='I';i++;r[i]='I';i++;break;
case 9:
r[i]='I';i++;r[i]='X';i++;break;
}
}
r[i]='\0';
return r;
}
2、罗马数转整数
依旧很暴力……代码看起来也不好看……真是个很菜很菜的蓝胖子~
int romanToInt(char* s) {
int len = strlen(s);
int num = 0;
for(int i = 0;i < len;i++)
{
if(s[i]=='I'&&s[i+1]=='V')
{num += 4;i++;}
else if(s[i]=='I'&&s[i+1]=='X')
{num += 9;i++;}
else if(s[i]=='I'&&s[i+1]!='V'&&s[i+1]!='X')
{num += 1;}
else if(s[i]=='V')
{num += 5;}
else if(s[i]=='X'&&s[i+1]=='L')
{num += 40;i++;}
else if(s[i]=='X'&&s[i+1]=='C')
{num += 90;i++;}
else if(s[i]=='X'&&s[i+1]!='L'&&s[i+1]!='C')
{num += 10;}
else if(s[i]=='L')
{num += 50;}
else if(s[i]=='C'&&s[i+1]=='D')
{num += 400;i++;}
else if(s[i]=='C'&&s[i+1]=='M')
{num += 900;i++;}
else if(s[i]=='C'&&s[i+1]!='D'&&s[i+1]!='M')
{num += 100;}
else if(s[i]=='D')
{num += 500;}
else //s[i]=='M'的情况
{num += 1000;}
}
return num;
}