计蒜客——整数转换成罗马数字
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
给定一个整数 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]; } }
相关文章推荐