整数转罗马数字
给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。
示例 :输入: 3,输出: “III”。
字符 数值:I 1,V 5,X 10,L 50,C 100,D 500,M 1000
class Solution {
public:
string intToRoman(int num) {
int values[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
string reps[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
string res;
for(int i=0; i<13; i++){
while(num>=values[i]){
num -= values[i];
res += reps[i];
}
}
return res;
}
};
罗马数字转整数
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
示例 : 输入: “III”,输出: 3
class Solution {
public:
int romanToInt(string s) {
int values[] = { 1000,900,500,400,100,90,50,40,10,9,5,4,1 };
string reps[] = { "M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I" };
int res=0;
int index = 0;
int i = 0;
while( i < 13&&index<s.size()) {
if (s.substr(index, reps[i].size()) == reps[i])
{
res += values[i];
index += reps[i].size();
}
else
i++;
}
return res;
}
};
整数转换英文表示
将非负整数转换为其对应的英文表示。可以保证给定输入小于 2^31 - 1 。
示例:输入: 12345, 输出: “Twelve Thousand Three Hundred Forty Five”。
class Solution {
public:
vector<int> keys = {1000000000,1000000,1000,100,90,80,70,60,50,40,30,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};
vector<string> values = {"Billion","Million","Thousand","Hundred","Ninety","Eighty","Seventy","Sixty","Fifty","Forty","Thirty","Twenty","Nineteen","Eighteen","Seventeen","Sixteen","Fifteen","Fourteen","Thirteen","Twelve","Eleven","Ten","Nine","Eight","Seven","Six","Five","Four","Three","Two","One","Zero"};
string numberToWords(int num) {
for (int i = 0; i < 32; ++i) {
int key = keys[i];
if (num >= key) {
if (num >= 100) {
return numberToWords(num / key) + " " + values[i] + (num % key > 0 ? " " + numberToWords(num % key) : "");
} else if (num >= 20) {
return values[i] + (num % 10 > 0 ? " " + numberToWords(num % 10) : "");
} else {
return values[i];
}
}
}
return "";
}
};