题解 | #数字变成罗马数字#

数字变成罗马数字

http://www.nowcoder.com/practice/0636c3db0de6437a8a86e58f46aa5c90

解题方法:
首先要明确罗马数字的表示方法
图片说明
所以根据以上规则,要先把特殊的和基本的表示出来,也就是
图片说明
表示完之后就看那个输入的数字在哪个范围内即可。以1994为例,步骤如下:
将给定数字按顺序依次除以1000、900、500、400、100、90、50、40、10、9、5、4、1,只要商大于0,就表示给定数字大于除数,然后找到除数对应的罗马数字,1994的第一个是1000,对应的是M
原数减去除数,将新数再次进行上面的操作,这时的除法就会从上一步的除数的下一个数开始。1994-1000=994,994找到的除数是900,对应的是CM
之后重复操作,994-900=94,94从500开始,商小于0就直接跳过进行下一个数,于是找到90,对应的是XC
94-90=4,从50开始,直到4,对应的是IV
4-4=0,结束。
最后输出MCMXCIV
代码如下:

class Solution {
public:
    /**
     * 
     * @param num int整型 
     * @return string字符串
     */
    string intToRoman(int num) {
        // write code here
        int values[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
        string str[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        string Roman;
        for(int i=0;i<13;i++)
        {
            while(num/values[i])
            {
                Roman+=str[i];
                num-=values[i];
            }
        }
        return Roman;
    }
};
牛客刷题记录 文章被收录于专栏

记录自己的刷题记录,刷过的题的解法

全部评论

相关推荐

jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务