C 语言中整数转罗马数字
cserver side programmingprogramming
给定一个十进制数 n,我们需要将其转换为罗马数字。值 n 的范围是 1 到 4000。这些是一些罗马数字。
数字 | 数字 |
---|---|
1 | I |
4 | IV |
5 | V |
9 | IX |
10 | X |
40 | XL |
50 | L |
90 | XC |
100 | C |
400 | CD |
500 | D |
900 | CM |
1000 | M |
4000 | MMMM |
因此,如果数字 n = 859,其罗马数字将是DCCCLIX
为了解决这个问题,我们将遵循以下步骤
- 定义一个数组来存储给定列表的数字及其对应的值。该数组称为 num 数组
- 我们使用递归方法,使用函数 decToRom()。该函数接受 num 数组和数字 num。
- decToRom() 的函数如下
- 如果 num 不为 0,则
- max := 从 num 数组中查找不大于 num 的最大值
- 将该最大值附加到结果字符串中
- num := num - 最大值
- decToRom(nume, num)
示例
让我们看下面的实现,以便更好地理解 −
#include<stdio.h> typedef struct{ char *sym; int val; }numeral; int maxNume(numeral *nu, int num){ int i, index; for(i = 0; i<15; i++){//15 numerals in array if(nu[i].val <= num) index = i; } //最大值数字索引,不大于数字 返回索引; } void decToRoman(numeral *nu, int num){ int max; if(num != 0){ max = maxNume(nu, num); printf(&"%s&", nu[max].sym); num -= nu[max].val;//减少数字 decToRoman(nu, num);//递归打印数字 } } main(){ int number; numeral nume[15] = {{"I",1},{"IV",4},{"V",5},{"IX",9}, {"X",10},{"XL",40},{"L",50},{"XC",90}, {"C",100},{"CD",400},{"D",500},{"CM",900},{"M",1000},{"MMMM",4000},{"V'",5000}}; printf("Enter a decimal number: "); scanf("%d", &number); if(number >0 && number <= 5000){//checking input number printf("The Roman equivalent of %d is ", number); decToRoman(nume, number); } else{ printf("Invalid Input"); } printf("
"); }
输入
570 3574
输出
DLXX MMMDLXXIV