Leetcode 第十二题 Integer to Roman

一,Integer to Roman(整数转化为罗马数字)
1, 问题描述:
给定一个整数(范围为[1,3999]),然后转化为一个罗马数字。求出这个罗马数字。

2, 罗马数字的描述:
第一,罗马数字最基本的有五个: I, II , III, IV , V分别代表数字1,2,3,4,5
第二,还有七个基本罗马字符:
I: 1
V: 5
X: 10
L: 50
C: 100
D: 500
M: 1000

3,有一些罗马规则如下:
第一,相同的数字连写时,所表示的数=这些数字相加得到的数, 如: III=3;
第二,小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如: VIII=8;
第三, 小的数字,(只限于I, X和C这三个)在大的数字的左边,所表示的数=大数减去小数得到的数, 如: IV=4; IX=9;
第四, 正常使用时,连写的数字重复不得超过三次。
例如: CXXIII=100+10+10+1+1+1=123。

二,AC了的程序,用Java写成的

import java.util.*;
public class Test2{        //leetcode

    public static String intToRoman(int num)
    {

        int [] data={1,4,5,9,10,40,50,90,100,400,500,900,1000};  //为什么是这些数,因为每个字符不能超过三个,因此,当数字为4是,则需要用5减去1,不能用4个1表示
        String []str={"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};  //一共有十三个数,其余数字可以用这十三个数组成
        String roman="";   //初始化字符串的值,为空
        int i=data.length-1;   //要从最后面开始比较,因为,给定的整数数组,是从小到大进行排序的。
        while(num!=0)
        {
            if(num>=data[i])
            {
                num=num-data[i];   //每次得到一个数字的罗马数字后,要减去这个数字,对剩余数字进行比较
                roman=roman+str[i];  //对字符串进行加起来,就是在每个字符串后面接新的字符
            }
            else
            {
                i--;  //如果给定的数字无法满足数组里面的数字,则进行加1
            }
        }
        return  roman;   //返回最终结果给用户

    }

    public static void main(String []args)
    {
        Scanner scan=new Scanner(System.in);
        int data;
        String result; 
        data=scan.nextInt();   //输入想要的数字
        result=intToRoman(data);    //返回调用的结果

        System.out.println("罗马数字: "+result);   //得到最终的罗马数字
    }
}

三,总结
1,这题只要总结一下规律,并且懂得罗马数字的规则,这题就不难了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值