[leetcode] 12. 整数转罗马数字

12. 整数转罗马数字

字符串处理,题超级简单,读懂题直接开干就行。

基本思路就是从大往小一点一点的来表示,具体看代码把:

class Solution {
public:
    string intToRoman(int num) {
        string ans = "";

        int m = 0;
        m = num / 1000;
        for (int i = 0; i < m; i++) {
            ans += ‘M‘;
        }
        num %= 1000;

        if (num >= 900) {
            ans += "CM";
            num -= 900;
        }
        if (num >= 500) {
            ans += "D";
            num -= 500;
        }
        if (num >= 400) {
            ans += "CD";
            num -= 400;
        }
        if (num >= 100) {
            int c = 0;
            c = num / 100;
            num %= 100;
            for (int i = 0; i < c; i++) {
                ans += ‘C‘;
            }
        }
        if (num >= 90) {
            ans += "XC";
            num -= 90;
        }
        if (num >= 50) {
            ans += "L";
            num -= 50;
        }
        if (num >= 40) {
            ans += "XL";
            num -= 40;
        }
        if (num >= 10) {
            int x = 0;
            x = num / 10;
            num %= 10;
            for (int i = 0; i < x; i++) {
                ans += ‘X‘;
            }
        }

        if (num >= 9) {
            ans += "IX";
            num -= 9;
        }
        if (num >= 5) {
            ans += "V";
            num -= 5;
        }
        if (num >= 4) {
            ans += "IV";
            num -= 4;
        }
        if (num >= 1) {
            int i = 0;
            i = num;
            for (int k = 0; k < i; k++) {
                ans += ‘I‘;
            }
        }

        return ans;
    }
};

原文地址:https://www.cnblogs.com/acbingo/p/9231639.html

时间: 2024-08-29 11:13:41

[leetcode] 12. 整数转罗马数字的相关文章

LeetCode 12. 整数转罗马数字(Integer to Roman)

题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1.12 写做 XII ,即为 X + II . 27 写做  XXVII, 即为 XX + V + II . 通常情况下,罗马数字中小的数字在大的数字的右边.但也存在特例,例如 4 不写做 IIII,而是 IV.数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到

LeetCode 12 - 整数转罗马数字 - [简单模拟]

题目链接:https://leetcode-cn.com/problems/integer-to-roman/ 题解: 把 $1,4,5,9,10,40,50, \cdots, 900, 1000$ 均看做档位,优先转化大的档位,直到不能转化为止,然后降一个档位,继续转化,反复如此直到 $num=0$. AC代码: struct Solution { int o[13]={1,4,5,9,10,40,50,90,100,400,500,900,1000}; string mp[13]; Solu

leetcode 12 整数转罗马数字 贪心

额,连着两个贪心? 这是局部最优问题:能用大“罗马数表示”就不会用小的. 先构造出所有基础罗马数,然后从大到小比较 因为比较的只有1000,900,...有限并有些麻烦,构造table  map<int,string> 然后,map默认安装按照key的值升序排序.. 想从大到小,用reverse_iterator class Solution { public: string intToRoman(int num) { map<int,string> calc = {{1000,&

【算法】【LeetCode】整数转罗马数字

题目: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1.12 写做 XII ,即为 X + II . 27 写做  XXVII, 即为 XX + V + II . 通常情况下,罗马数字中小的数字在大的数字的右边.但也存在特例,例如 4 不写做 IIII,而是 IV.数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 .同样

LeetCode 12 int转罗马数字

class Solution { public: string intToRoman(int num) { string M[] = {"", "M", "MM", "MMM"}; //千位,从1000到三千 string C[] = {"", "C", "CC", "CCC", "CD", "D", &qu

12.整数转罗马数字

题目描述: 解法: 贪心法 class Solution { public: string intToRoman(int num) { vector<int> number = {1000,900,500,400,100,90,50,40,10,9,5,4,1}; vector<string> roman={"M","CM","D","CD","C","XC",&

LeetCode 12 Integer to Roman (整数转罗马数字)

题目链接: https://leetcode.com/problems/integer-to-roman/?tab=Description String M[] = {"", "M", "MM", "MMM”};//1000~3000String C[] = {"", "C", "CC", "CCC", "CD", "D&quo

Leetcode12---&gt;Integer to Roman(整数转换为罗马数字)

题目: 给定一个整数,将其转换为罗马数字; 题目很简单,主要是依靠整数和罗马数字的对应表: I= 1:V= 5: X = 10: L = 50: C = 100: D = 500: M = 1000 代码如下: 1 public class Solution { 2 public String intToRoman(int num) { 3 if(num <= 0) 4 return ""; 5 String[][] RomanDict = new String[][] { 6

leetcode 343. 整数拆分:动态规划(c++)

leetcode 343. 整数拆分 分析 状态表示: · dp[i] 表示整数 i 拆分乘积的最大值. 转移方程: · 对于每个数字 i 都进行一遍循环,计算 (i - j) * j,(j <= i - 1),并求其与 dp[i],dp[i - j] * j 的最大值,即:dp[i] = max(dp[i],(i - j) * j,dp[i - j] * j) · 与 dp[i - j] * j 比较是因为 i - j 可能小于 i - j 拆分的乘积. 边界: · 输入的整数 n 大于等于