力扣 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;
	}
};
相关推荐
黑客-秋凌13 小时前
使用Python+selenium实现第一个自动化测试脚本
开发语言·自动化测试·软件测试·python·selenium·测试工具
王维同学14 小时前
IFEO Debugger、VerifierDlls 与 SilentProcessExit 配置
c++·windows·安全·注册表
geovindu14 小时前
CSharp: Iterative Algorithms
开发语言·后端·算法·c#·.net·迭代算法
小保CPP14 小时前
OpenCV C++计算多边形的最大内切圆
c++·人工智能·opencv·计算机视觉
一只月月鸟呀14 小时前
移动端tap与click的区别 && 点透事件
开发语言·前端·javascript
雨落在了我的手上14 小时前
Java数据结构(六):链表的介绍
java·开发语言·数据结构
影寂ldy14 小时前
C# HttpClient 分片下载、断点续传、暂停取消(完整项目知识点)
开发语言·c#
独隅14 小时前
DevEco Code Plan+Build 双 Agent 协同开发效率实测
java·开发语言
lueluelue4715 小时前
八股临时总结
c++
KaMeidebaby15 小时前
卡梅德生物技术快报|抗体筛选:抗体筛选中的噬菌体展示四参数调优——从流程设计到数据验证
开发语言·前端·javascript