1000ms 65536K
给定一个整数 numnum,将整数转换成罗马数字。
如 1,2,3,4,51,2,3,4,5 对应的罗马数字分别为I,II,III,IV,V等,更详细的说明见此 链接。
输入格式
第一行输入一个整数 num(1 \leq num \leq 3999)num(1≤num≤3999)。
输出格式
输出 numnum 对应的罗马数字。
样例输入
123
样例输出
CXXIII
#include<stdio.h>
#include<malloc.h>
#define N 30
int thousand,hunderd,ten,one,i = 0,j = 0;
char* str;
char Roma[8] = {'I','V','X','L','C','D','M'};
char* calculate(int X);
void SpecialCalculate(int num,int flag);
int main(void)
{
int num;
str = (char*)malloc(sizeof(char)*N);
scanf("%d",&num);
printf("%s",calculate(num));
return 0;
}
char* calculate(int X)
{
thousand = X/1000;
hunderd = X%1000/100;
ten = X%100/10;
one = X%10;
//处理千位数
if(thousand != 0)
for(j = 0;j < thousand;j++)
str[i++] = Roma[6];
if(hunderd != 0)
{
//3以下的直接循环输出 4则特别输出,5到8循环输出,9特殊
SpecialCalculate(hunderd,0);
}
if(ten != 0)
{
SpecialCalculate(ten,1);
}
if(one != 0)
SpecialCalculate(one,2);
str[i] = '\0';
return str;
}
void SpecialCalculate(int num,int flag)
{
int gap = flag*2;
if(num <= 3)
for(j = 0;j < num;j++)
str[i++] = Roma[4-gap];
else if(4 == num)
{
str[i++] = Roma[4-gap];
str[i++] = Roma[5-gap];
}
else if(9 == num)
{
str[i++] = Roma[4-gap];
str[i++] = Roma[6-gap];
}
else
{
str[i++] = Roma[5-gap];
for(j = 0;j<num - 5;j++)
str[i++] = Roma[4-gap];
}
}