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之间的整型数字转换为罗马数字并输出。

解这道题我们必须了解罗马字母与整数之间的对应:

对照举例如下:

AC代码

class Solution {
public:
    string intToRoman(int num) {
        //存储罗马数字
        string str;
        if (num == 0)
            return "";

        //(1)首先处理最高位千位数字
        if (num >= 1000)
        {
            int count = num / 1000;
            for (int i = 0; i < count; i++)
                str += RomanLeter(1000);
           //得到百位数
            num %= 1000;
           //链接其余三位数字对应的罗马序列
            str += intToRoman(num);
        }//else if
        else if (num >= 100)
        {
            if (num >= 900)
            {
                str = str + RomanLeter(100) + RomanLeter(1000);
                num %= 100;
            }//if
            else if (num >= 500)
            {
                str += RomanLeter(500);
                num -= 500;

            }//else if
            else if (num >= 400){
                str = str + RomanLeter(100) + RomanLeter(500);
                num -= 400;
            }
            else{
                while (num >= 100)
                {
                    str += RomanLeter(100);
                    num -= 100;
                }//while
            }
            str += intToRoman(num);
        }//else if
        else if (num >= 10)
        {
            if (num >= 90)
            {
                str = str + RomanLeter(10) + RomanLeter(100);
                num %= 10;
            }//if
            else if (num >= 50)
            {
                str += RomanLeter(50);
                num -= 50;
            }
            else if (num >= 40){
                str = str + RomanLeter(10) + RomanLeter(50);
                num -= 40;
            }
            else{
                while (num >= 10)
                {
                    str += RomanLeter(10);
                    num -= 10;
                }
            }
            str += intToRoman(num);
        }
        else if (num >= 1)
        {
            if (num == 9)
            {
                str = str + RomanLeter(1) + RomanLeter(10);
                num /= 10;
            }
            else if (num >= 5)
            {
                str += RomanLeter(5);
                num -= 5;
            }
            else if (num >= 4){
                str = str + RomanLeter(1) + RomanLeter(5);
                num -= 4;
            }
            else{
                while (num >= 1)
                {
                    str += RomanLeter(1);
                    num -= 1;
                }
            }
            str += intToRoman(num);
        }
        else
            str += "\0";
        return str;
    }

    string RomanLeter(int n)
    {
        switch (n)
        {
        case 1:
            return "I"; break;
        case 5:
            return "V"; break;
        case 10:
            return "X"; break;
        case 50:
            return "L"; break;
        case 100:
            return "C"; break;
        case 500:
            return "D"; break;
        case 1000:
            return "M"; break;
        default:
            return ""; break;
        }
    }
};

Git测试程序代码

时间: 2024-09-30 06:37:59

LeetCode(12)Integer to Roman的相关文章

leetcode第12题--Integer to Roman

Problem: Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 把阿拉伯数字转换为罗马数字输出.百度一下对应的 I V X L C D M,代表1,5,10,50,100,500,1000 然后写一个子函数,输入数字和相应的位数级别,如个位为level 1,千为4.因为最多不会超过四千.所以可以如下.注意了,string用法很好

MyCat - 源代码篇(12)

数据库路由中间件MyCat - 源代码篇(12) 4.配置模块 4.2 schema.xml 接上一篇,接下来载入每个schema的配置(也就是每个MyCat中虚拟化的数据库的配置): XMLSchemaLoader.java private void loadSchemas(Element root) { NodeList list = root.getElementsByTagName("schema"); for (int i = 0, n = list.getLength();

Leetcode(1)两数之和

Leetcode(1)两数之和 [题目表述]: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 第一种方法:暴力 执行用时:5352 ms: 内存消耗:12.9MB 效果:非常差 class Solution(object): def twoSum(self, nums, target): """ :type nums:

Leetcode(2)两数相加

Leetcode(2)两数相加 [题目表述]: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和.您可以假设除了数字 0 之外,这两个数都不会以 0 开头. 第一种方法:大众解法 执行用时:80 ms: 内存消耗:12.2MB # Definition for singly-linked list. # class ListNode(object

Leetcode(3)无重复字符的最长子串

Leetcode(3)无重复字符的最长子串 [题目表述]: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 第一种方法:暴力 执行用时:996 ms: 内存消耗:12.9MB 效果:太差 class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ Maxsize=0 res='' if len(s)

蓝桥杯 地宫取宝(12&#39;)

X 国王有一个地宫宝库.是n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大, 小明就可以拿起它(当然,也可以不拿). 当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明. 请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝. [数据格式] 输入一行 3个整数,用空格分开:n m

产品定位四十八招(12)定位盈利专家吴玉龙

第四十招:基于"专用"定位策略<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 广告语"就像刚刚步出美发厅"定位"美发厅的选择"牌是美发厅专用的一种洗发香波. 第四十一招:"一次性使用"定位策略 1987年,柯达公司推出一次性相机获得了巨大的成功.1993年,仅在美国就销售了930万个一次性相

HTML基础教程(12)——HTML图像--

通过使用 HTML,可以在文档中显示图像. 实例 插入图像 本例演示如何在网页中显示图像. 从不同的位置插入图片 本例演示如何将其他文件夹或服务器的图片显示到网页中. (可以在本页底端找到更多实例.) 图像标签(<img>)和源属性(Src) 在 HTML 中,图像由 <img> 标签定义. <img> 是空标签,意思是说,它只包含属性,并且没有闭合标签. 要在页面上显示图像,你需要使用源属性(src).src 指 "source".源属性的值是图像

SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现

到这里已经写到第12篇了,前11篇基本上把Spring MVC主要的内容都讲了,现在就直接上一个项目吧,希望能对有需要的朋友有一些帮助. 一.首先看一下项目结构: InfrastructureProjects:是抽取出的基础项目,主要封装了一些通用的操作. SpringMVC3Demo:就是管理系统所在的项目. WeiXinAPI:是之前做微信管理平台测试时封装一些操作,如果不需要把该项目移除即可. 注:项目的前端UI框架用的是国外的一个基于Bootstrap框架的开发的Demo,如不需要替换为