您的位置:首页 > 其它

计蒜客——整数转换成罗马数字

2018-03-28 23:08 267 查看
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];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 计蒜客