Question:

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

给你一个整数,把它转化为罗马数字,输入保证在1到3999之间。

关于罗马数字介绍:

1、计数方法:① 罗马数字就有下面七个基本符号:Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、L(50)、C(100)、D(500)、M(1000)。

② 相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;XX=20;CC=200;MMM=3000;

③ 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;

④ 小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;

⑤  正常使用时连写的数字重复不得超过三次;

   2、组数规则: ① 基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个。

                         ② 不能把基本数字V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目;

                         ③ V 和X 左边的小数字只能用Ⅰ。

                         ④ L 和C 左边的小数字只能用X。

                         ⑤ D 和M 左边的小数字只能用C。

  3、对照举例:    ① 个位举例:Ⅰ,1 】Ⅱ,2】 Ⅲ,3】 Ⅳ,4 】Ⅴ,5 】Ⅵ,6】Ⅶ,7】 Ⅷ,8 】Ⅸ,9 】

            ② 十位举例:Ⅹ,10】 Ⅺ,11 】Ⅻ,12】 XXXV,35 】XXXIX,39】 XL,40】 L,50 】LI,51】 LV,55】 XC,90 】XCIII,93】 XCV,95 】XCVIII,98】

③ 百位举例:C,100】 CC,200 】CCC,300 】CD,400】 D,500 】DC,600 】DCC,700】 DCCC,800 】CM,900】 CMXCIX,999】

④ 千位举例:M,1000】 MC,1100 】MCD,1400 】MD,1500 】MDC,1600 】 MCMXC,1990 】MM,2000 】MMMCMXCIX,3999

算法基本思想:  这个题仅仅要求到3999比较简单,根据罗马数字的构建数字的规则,无论个位十位百位还是千位都有相同的构造方法,但是所表示的字母是不同的,所以我想到去写一个函数,public String intToCharacter(int n,int i),n表示数位上的数字,i表示要转化的整数从右到左第几位,这个函数可以把单独的数字转化成罗马字母,在public String intToRoman(int num) 函数中,传入要转化的整数num,然后依次从右向左取出各位,依次求相应罗马数字,并进行字符串拼接,就能得到所需要的结果。

  代码实现(java):

 class Solution {
public String intToRoman(int num) {
String str="";
int i=1,n; //i表示从右到左整数第几位
while(num>0){
n=num%10; //表示数位上的数字
num/=10;
str=intToCharacter(n, i).concat(str); //把每一位返回的字符串和str相连
i++;
}
return str;
}
public String intToCharacter(int n,int i){//n表示特定的输入,i表示个位十位百位或者千位
String str1,str2,str3;//拿0~9之间的数举例,str1表示I,str2表示V,str3表示X
String str="";//这个函数返回特定位上的罗马数字表示形式
if(1==i){ //下面if语句是判断n是哪一位上的,依次用罗马数字表示1、5、10
str1="I"; //个位上的数
str2="V";
str3="X";
}
else if(2==i){
str1="X"; //十位上的数
str2="L";
str3="C";
}else if(3==i){
str1="C"; //百位上的数
str2="D";
str3="M";
}else{
str1="M"; //千位上的数,因为最大数到3999,所以str2和str3为空
str2="";
str3="";
}
switch(n){ //switch对各数字进行组合以个位上的数举例如下
case 0:break; //空
case 1:str+=str1;break; //I
case 2:str+=str1+str1;break; //II
case 3:str+=str1+str1+str1;;break;//III
case 4:str+=str1+str2;break; //IV
case 5:str+=str2;break; //V
case 6:str+=str2+str1;break; //VI
case 7:str+=str2+str1+str1;break; //VII
case 8:str+=str2+str1+str1+str1;break; //VIII
case 9:str+=str1+str3;break; //IX
}
return str;
}
}

leetcode:Integer to Roman(整数转化为罗马数字)的更多相关文章

  1. [LeetCode] Integer to Roman 整数转化成罗马数字

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

  2. [LeetCode] 12. Integer to Roman 整数转化成罗马数字

    Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...

  3. [LintCode] Integer to Roman 整数转化成罗马数字

    Given an integer, convert it to a roman numeral. The number is guaranteed to be within the range fro ...

  4. [Leetcode] Interger to roman 整数转成罗马数字

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

  5. 012 Integer to Roman 整数转换成罗马数字

    给定一个整数,将其转为罗马数字.输入保证在 1 到 3999 之间. 详见:https://leetcode.com/problems/integer-to-roman/description/ cl ...

  6. 【LeetCode】12. Integer to Roman 整数转罗马数字

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:roman, 罗马数字,题解,leetcode, 力扣, ...

  7. lintcode :Integer to Roman 整数转罗马数字

    题目 整数转罗马数字 给定一个整数,将其转换成罗马数字. 返回的结果要求在1-3999的范围内. 样例 4 -> IV 12 -> XII 21 -> XXI 99 -> XC ...

  8. LeetCode: Integer to Roman 解题报告

    Integer to Roman Given an integer, convert it to a roman numeral. Input is guaranteed to be within t ...

  9. [LeetCode] 12. Integer to Roman 整数转为罗马数字

    Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...

随机推荐

  1. 解决Ext.form.DateField在浏览器中显示可能有问题

    解决Ext.form.DateField在浏览器中显示可能有问题,界面将会拉的很长很长.如下图:  办法: 1:设置css的长度 .x-date-menu { padding-top:2px;padd ...

  2. ORA-00911无效字符报错

    今天在修改缺陷时遇到一个问题,更新数据库字段时一直报错:ORA-00911.sql脚本如下: '; '; '; 该脚本在数据库中可以执行,但是从程序中去访问数据库修改值时就会报错. 报错的原因在于,更 ...

  3. Control character in cookie value, consider BASE64 encoding your value

    这是因为你给Cookie设置了中文的value,比如Cookie c = new Cookie("user", "张三");

  4. 巧用cssText属性批量操作样式

    给一个HTML元素设置css属性,如 1 2 3 4 var head= document.getElementById("head"); head.style.width = & ...

  5. 没有显示器且IP未知的情况下登录树莓派

    如果是没有显示器操作树莓派,可能会不知道树莓派有线网卡自动分配到的IP地址,不知道登录到哪儿.以下提供详细操作步骤解决这个问题. 网段扫描法这个是推荐的办法.网段扫描工具很多,推荐一个Advanced ...

  6. OpenStack介绍

    简介 OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作.OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单.可大规模扩展.丰富.标准统一的云计算管 ...

  7. ArcGis Javascript API (V3.6)加载天地图

    Arcgis的Javascript api开发很活跃,不知不觉都发布了3.6的版本了.该版本基于dojo 1.8.3开发的. 从dojo 1.8开始,AMD机制用得越来越多了,而且require([& ...

  8. C#处理文件流的转换

    //----引入必要的命名空间 using System.IO; using System.Drawing.Imaging; //----代码部分----// private byte[] photo ...

  9. 听说noip2015有幻方

    终于可以说一句:pascal大法好了 magic.pp是写好的算幻方哦…… 虽然这种水题大家都会,也没什么卵用……

  10. EF CodeFirst-----简单demo示例

    关于EF CodeFirst的文章院子里有很多的学习资料,但大多数都是一些讲Model通过特性或是Fluent API与数据库之间形成映射的关系,看了相关的文章之后,Model如何映射到数据还是有些迷 ...