計蒜客——整數轉換成羅馬數字
阿新 • • 發佈:2019-01-01
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];
}
}