数字到罗马数字
罗马数字是非位置数字。一些数字放在一起形成罗马数字中的数字。例如,数字75可以表示为75=50+10+10+5,因此罗马数字为LXXV。
在这个问题中,提供了一个十进制格式的数字,我们的任务是将其转换为罗马数字字符串。
有不同的符号和它们的值,就像这样。
使用此表,我们可以轻松找到给定数字的罗马数字。
输入和输出
Input: Decimal number: 3569 Output: 罗马相当于 3569 is: MMMDLXIX
算法
decToRoman(nuList, num)
输入: 数字列表及其值,要转换为罗马的数字。
输出: 给定数字的罗马数字。
Begin if num ≠ 0, then max := get maximum numeral value, not greater than number display the nuList[max].symbol num := num – nuList[max].value decToRoman(nuList, num) End
示例
#include输出结果using namespace std; struct numeral { string sym; int val; }; int maxNume(numeral nu[], int num) { int index; for(int i = 0; i<15; i++) //数组中的15个数字 if(nu[i].val<= num) index = i; //最大值数字索引,不大于数字 return index; } void decToRoman(numeral nu[], int num) { int max; if(num != 0) { max = maxNume(nu, num); cout << nu[max].sym; num -= nu[max].val; //减少数 decToRoman(nu, num); //递归打印数字 } } int 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} }; cout << "输入一个十进制数: "; cin >> number; if(number >0 && number <= 5000) { //检查输入号码 cout<<"罗马相当于 " << number<<" is: "; decToRoman(nume, number); }else { cout << "Invalid Input"; } }
输入一个十进制数: 3569 罗马相当于 3569 is: MMMDLXIX