请用C语言写下列代码:输入一个数字(0<num<4000),转换成罗马数字并存储在字符串中输出, 在罗马数字中有其中不同的符号:I,V,X,L,C,D,M,分别对应阿拉伯数字, Sybol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000, 所以1表示为”I”,而2则表示为”II”,即”I”+”I”,直到4,不再这样直接相加,而是表示为5-1,即”IV”, 超过5以后,分别用VI表示 6,VII表示 7,VIII表示 8,而9则表示为10-1,即“IX“,以此类推,40表示为”XL”, 80表示为“LXXX",90表示为”XC”,100表示为”C",300表示为“CCC”,400表示 为“CD”,600表示为“DC”,900表示为“CM”… 输入提示:"Please input number:\n" 输入格式: "%d" 输出格式: "%s" 程序运行结果实例1: Please input number: ↙ 3999 MMMCMXCIX
时间: 2024-02-27 11:52:23 浏览: 136
下面是代码实现:
```c
#include <stdio.h>
#include <string.h>
int main()
{
int num, i, j;
char roman[1000];
/* 罗马数字对应的阿拉伯数字值和符号 */
int vals[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
char* syms[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
printf("Please input number:\n");
scanf("%d", &num);
/* 将阿拉伯数字转换成罗马数字 */
i = 0;
while (num > 0)
{
while (num >= vals[i])
{
strcat(roman, syms[i]);
num -= vals[i];
}
i++;
}
/* 输出罗马数字 */
printf("%s\n", roman);
return 0;
}
```
这里使用了两个数组,一个是`vals`数组,保存了罗马数字对应的阿拉伯数字值,另一个是`syms`数组,保存了罗马数字的符号。我们通过循环遍历`vals`数组,每次尽可能多地减去当前的阿拉伯数字值,同时将对应的罗马数字符号拼接到字符串`roman`中。最终输出`roman`即可。
阅读全文