LeetCode-整数与字符的转换问题

整数转罗马数字

给定一个整数,将其转为罗马数字。输入确保在 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 "";
    }
};

发布了76 篇原创文章 · 获赞 6 · 访问量 2781

猜你喜欢

转载自blog.csdn.net/u014618114/article/details/104092752