上一篇博客实现了罗马数字转数字,这篇博客我们实现输入数字转换成罗马数字。
问题要求,输入一个数字,转换成罗马数字。
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
下面我们列举一些罗马数字,就能根据这些特点发现规律。
- 1:I
- 2:II
- 3:III
- 4:IV
- 5:V
- 6:VI
- 7:VII
- 8:VIII
- 9:IX
- 10:X
- 11:XI
- 12:XII
- 13:XIII
- 14:XIV
- 15:XV
- 16:XVI
- 17:XVII
- 18:XVIII
- 19:XIX
- 20:XX
- 21:XXI
- 22:XXII
- 23:XXIII
- 24:XXIV
- 25:XXV
- 26:XXVI
- 27:XXVII
- 28:XXVIII
- 29:XXIX
- 30:XXX
- 31:XXXI
- 32:XXXII
- 33:XXXIII
- 34:XXXIV
- 35:XXXV
- 36:XXXVI
- 37:XXXVII
- 38:XXXVIII
- 39:XXXIX
- 40:XL
- 41:XLI
- 42:XLII
- 43:XLIII
- 44:XLIV
- 45:XLV
- 46:XLVI
- 47:XLVII
- 48:XLVIII
- 49:XLIX
- 50:L
- 51:LI
- 52:LII
- 53:LIII
- 54:LIV
- 55:LV
- 56:LVI
- 57:LVII
- 58:LVIII
- 59:LIX
- 60:LX
- 61:LXI
- 62:LXII
- 63:LXIII
- 64:LXIV
- 65:LXV
- 66:LXVI
- 67:LXVII
- 68:LXVIII
- 69:LXIX
- 70:LXX
- 71:LXXI
- 72:LXXII
- 73:LXXIII
- 74:LXXIV
- 75:LXXV
- 76:LXXVI
- 77:LXXVII
- 78:LXXVIII
- 79:LXXIX
- 80:LXXX
- 81:LXXXI
- 82:LXXXII
- 83:LXXXIII
- 84:LXXXIV
- 85:LXXXV
- 86:LXXXVI
- 87:LXXXVII
- 88:LXXXVIII
- 89:LXXXIX
- 90:XC
- 91:XCI
- 92:XCII
- 93:XCIII
- 94:XCIV
- 95:XCV
- 96:XCVI
- 97:XCVII
- 98:XCVIII
- 99:XCIX
- 100:C
- 101:CI
- 102:CII
- 103:CIII
- 104:CIV
- 105:CV
- 106:CVI
- 107:CVII
- 108:CVIII
- 109:CIX
- 110:CX
- 111:CXI
- 112:CXII
- 113:CXIII
- 114:CXIV
- 115:CXV
- 116:CXVI
- 117:CXVII
- 118:CXVIII
- 119:CXIX
- 120:CXX
- 121:CXXI
- 122:CXXII
- 123:CXXIII
- 124:CXXIV
- 125:CXXV
- 126:CXXVI
- 127:CXXVII
- 128:CXXVIII
- 129:CXXIX
- 130:CXXX
- 131:CXXXI
- 132:CXXXII
- 133:CXXXIII
- 134:CXXXIV
- 135:CXXXV
- 136:CXXXVI
- 137:CXXXVII
- 138:CXXXVIII
- 139:CXXXIX
- 140:CXL
- 141:CXLI
- 142:CXLII
- 143:CXLIII
- 144:CXLIV
- 145:CXLV
- 146:CXLVI
- 147:CXLVII
- 148:CXLVIII
- 149:CXLIX
- 150:CL
- 151:CLI
- 152:CLII
- 153:CLIII
- 154:CLIV
- 155:CLV
- 156:CLVI
- 157:CLVII
- 158:CLVIII
- 159:CLIX
- 160:CLX
- 161:CLXI
- 162:CLXII
- 163:CLXIII
- 164:CLXIV
- 165:CLXV
- 166:CLXVI
- 167:CLXVII
- 168:CLXVIII
- 169:CLXIX
- 170:CLXX
- 171:CLXXI
这里我们实现的思路就是使用循环,当循环的时候开始匹配,看其数字的大小,如果匹配,这里我们就可以将其替换出来,然后数字进行减value值。
下面就是代码实现。
#include <iostream>
#include <string>
#include<vector>
using namespace std;
string Romannum(int num) {
// 定义罗马数字的符号和对应的值
vector<int> values = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
vector<string> symbols = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
string result;
for (int i = 0; i < values.size() - 1; i++) {
while (num > values[i]) {
result += symbols[i];
num -= values[i];
}
}
return result;
}
int main() {
int num;
cin >> num;
cout << Romannum(num) << endl;
return 0;
}