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

该博客介绍了如何使用C语言将整数(1-3999)转换为罗马数字。通过创建一个对应表并根据罗马数字的规则逐位替换整数的各个部分来实现转换。示例输入123,输出为CXXIII。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个整数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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值