您的位置:首页 > 其它

第13题:整数转换成罗马数字

2015-01-19 13:16 369 查看
给定一个整数num,( 1<=num<=3999),将整数转换成罗马数字。

如1,2,3,4,5对应的罗马数字分别位I,II,III,IV,V等。

格式:

第一行输入一个整数,接下来输出对应的罗马数字。

样例输入:

123

样例输出:

CXXIII

遇到这道题的时候,不了解罗马数字的规则的话,还真不知道怎么写。没什么好说的,度娘。。

研究了一下,知道这一题的本意是让我们将整数的每一位都拆开,分别用罗马数字替换,当然得符合规则。。

我写了一份对应表:



这样这一题就只要对应替换就行了,代码如下:

#include<stdio.h>

#include<string.h>

int main(void) {

intnum;

intx, i, len;

charres[16];

chara[5], b[5], c[5], d[5];

scanf("%d",&num);

if(num < 1 || num > 3999) {

return0;

}

//个位

x= num % 10;

switch(x) {

case0 : a[0] = '\0'; break;

case1 : a[0] = 'I'; a[1] = '\0'; break;

case2 : a[0] = 'I'; a[1] = 'I'; a[2] = '\0'; break;

case3 : a[0] = 'I'; a[1] = 'I'; a[2] = 'I'; a[3] = '\0'; break;

case4 : a[0] = 'I'; a[1] = 'V'; a[2] = '\0'; break;

case5 : a[0] = 'V'; a[1] = '\0'; break;

case6 : a[0] = 'V'; a[1] = 'I'; a[2] = '\0'; break;

case7 : a[0] = 'V'; a[1] = 'I'; a[2] = 'I'; a[3] = '\0'; break;

case8 : a[0] = 'V'; a[1] = 'I'; a[2] = 'I'; a[3] = 'I'; a[4] = '\0'; break;

case9 : a[0] = 'I'; a[1] = 'X'; a[2] = '\0'; break;

}

//十位

x= ( num / 10 ) % 10;

switch(x) {

case0 : b[0] = '\0'; break;

case1 : b[0] = 'X'; b[1] = '\0'; break;

case2 : b[0] = 'X'; b[1] = 'X'; b[2] = '\0'; break;

case3 : b[0] = 'X'; b[1] = 'X'; b[2] = 'X'; b[3] = '\0'; break;

case4 : b[0] = 'X'; b[1] = 'L'; b[2] = '\0'; break;

case5 : b[0] = 'L'; b[1] = '\0'; break;

case6 : b[0] = 'L'; b[1] = 'X'; b[2] = '\0'; break;

case7 : b[0] = 'L'; b[1] = 'X'; b[2] = 'X'; b[3] = '\0'; break;

case8 : b[0] = 'L'; b[1] = 'X'; b[2] = 'X'; b[3] = 'X'; b[4] = '\0'; break;

case9 : b[0] = 'X'; b[1] = 'C'; b[2] = '\0'; break;

}

//百位

x= ( num / 100 ) % 10;

switch(x) {

case0 : c[0] = '\0'; break;

case1 : c[0] = 'C'; c[1] = '\0'; break;

case2 : c[0] = 'C'; c[1] = 'C'; c[2] = '\0'; break;

case3 : c[0] = 'C'; c[1] = 'C'; c[2] = 'C'; c[3] = '\0'; break;

case4 : c[0] = 'C'; c[1] = 'D'; c[2] = '\0'; break;

case5 : c[0] = 'D'; c[1] = '\0'; break;

case6 : c[0] = 'D'; c[1] = 'C'; c[2] = '\0'; break;

case7 : c[0] = 'D'; c[1] = 'C'; c[2] = 'C'; c[3] = '\0'; break;

case8 : c[0] = 'D'; c[1] = 'C'; c[2] = 'C'; c[3] = 'C'; c[4] = '\0'; break;

case9 : c[0] = 'C'; c[1] = 'M'; c[2] = '\0'; break;

}

//千位

x= ( num / 1000 ) % 10;

switch(x) {

case0 : d[0] = '\0'; break;

case1 : d[0] = 'M'; d[1] = '\0'; break;

case2 : d[0] = 'M'; d[1] = 'M'; d[2] = '\0'; break;

case3 : d[0] = 'M'; d[1] = 'M'; d[2] = 'M'; d[3] = '\0'; break;

}

i= 0;

len= 0;

while(d[i] != '\0') {

res[len]= d[i];

i++;

len++;

}

i= 0;

while(c[i] != '\0') {

res[len]= c[i];

i++;

len++;

}

i= 0;

while(b[i] != '\0') {

res[len]= b[i];

i++;

len++;

}

i= 0;

while(a[i] != '\0') {

res[len]= a[i];

i++;

len++;

}

res[len]= '\0';

printf("%s",res);

return0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: