LeetCode 12. Integer to Roman(罗马字符转阿拉伯数字)

题目描述:

    Given an integer, convert it to a roman numeral.
    Input is guaranteed to be within the range from 1 to 3999.

分析:
    题意:给定一个阿拉伯数字(范围是1~3999),把它转化为对应的罗马数字。
    思路:这是一道数学题,我们需要知道阿拉伯数字和罗马数字的转化关系:罗马基本字符和对应的阿拉伯数字为M→1000,D→500,C→100,L→50,X→10,V→5,I→1;罗马复合字符和对应的阿拉伯数字为CM→1000-100=900,CD→500-100=400,XC→100-10=90,XL→50-10=40,IX→10-1=9,IV→5-1=4。
    我们把映射关系保存好,然后从大到小判断给定的整数是否包含该罗马字符,如果包含,在答案中加上该罗马字符、在给定整数中减去对应的阿拉伯数值,直到给定整数为0,返回结果。

代码:

#include <bits/stdc++.h>

using namespace std;

class Solution {
public:
    string intToRoman(int num) {
        int list_int[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
		string list_roman[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
		string ans = "";
		while(num > 0){
			for(int i = 0; i <= 12; i++){
				if(num >= list_int[i]){
					ans += list_roman[i];
					num -= list_int[i];
					break;
				}
			}
		}
		return ans;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值