力扣 12 整数转罗马数字 C++

题目

知识点

C++标准库utility

题目解释

题解

逐位编码------低位到高位

answer = substr + answer;//不可以交换位置!!!

复制代码
class Solution {
public:
    string intToRoman(int num) {
        string answer = "";//存放最终结果
        int mo;//mo存放当前要处理的数字
        int d = 0;//d表示当前正处理第d位(个位 十位 百位)
        char ch_10[] = { 'I','X','C','M' };//1个位  10十位  100  1000
        char ch_5[] = { 'V','L','D' };//5个位  50十位  500

        while(num > 0){
            string substr = "";//临时存放当前位的处理结果
            mo = num % 10;
            if(mo == 4){//4 IV
                substr = substr + ch_10[d] + ch_5[d];//4 IV 1在前,5在后
            }else if(mo == 9){//9 IX
                substr = substr + ch_10[d] + ch_10[d + 1];//9 IX 1在前,10在后
            }else if(mo >= 5 && mo <= 8){
                substr.insert(substr.begin(),ch_5[d]);//将字符ch_5[d]插入到字符串substr的开头
                for(int i=0 ; i<(mo-5) ;i++){
                    substr = substr + ch_10[d];//在substr后面加上表示1的字符------I
                }
            }else{
                for(int i=0;i<mo;i++){
                    substr = substr + ch_10[d];
                }
            }
            answer = substr + answer;//不可以交换位置!!!
            d++;
            num /= 10;
        }//while

        return answer;
    }
};

大数查表法------高位到低位

复制代码
const pair<int, string> valueSymbols[] = {
	{1000,"M"},
	{900,"CM"},
	{500,"D"},
	{400,"CD"},
	{100,"C"},
	{90,"XC"},
	{50,"L"},
	{40,"XL"},
	{10,"X"},
	{9,"IX"},
	{5,"V"},
	{4,"IV"},
	{1,"I"},
};

class Solution {
public:
	string intToRoman(int num) {
		string roman;
		for (const auto& [value, symbol] : valueSymbols) {
			while (num >= value) {
				num -= value;
				roman += symbol;
			}
			if (num == 0) {
				break;
			}
		}
		return roman;
	}
};
相关推荐
8Qi82 小时前
环形链表刷题笔记(LeetCode热题100--141、142)
c语言·数据结构·c++·算法·leetcode·链表
Kang.Charles2 小时前
UE4 C++将Json数据写入目标字符串
c++·json·ue4
LONGZETECH2 小时前
智能网联汽车故障诊断仿真教学软件技术解析——C/S架构落地与全模块实现
c语言·开发语言·架构·汽车·汽车仿真教学软件·汽车教学软件·智能网联汽车软件
JIes__2 小时前
lua语法——基础知识总结
开发语言·lua
滴滴答滴答答2 小时前
机考刷题之 13 LeetCode 1004 最大连续1的个数 III
java·算法·leetcode
一叶落4382 小时前
139. 单词拆分(Word Break)
c语言·数据结构·算法·leetcode·深度优先·图论
Yupureki2 小时前
《算法竞赛从入门到国奖》算法基础:数据结构-单调队列
c语言·数据结构·c++·算法
_OP_CHEN2 小时前
【MySQL数据库基础】(五)MySQL 数据类型深度解析:选对类型 = 性能拉满!
linux·开发语言·数据库·sql·mysql·数据类型·c/c++
逆境不可逃2 小时前
【从零入门23种设计模式17】行为型之中介者模式
java·leetcode·microsoft·设计模式·职场和发展·中介者模式