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

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];
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值