Integer to Roman

来源:互联网 发布:网络监控数据线连接 编辑:程序博客网 时间:2024/06/14 00:12

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
1、相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
2、小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
3、小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
4、正常使用时、连写的数字重复不得超过三次;

#include<math.h>class Solution {public:    string intToRoman(int num) {        string ans="";        string a, b, c;        int temp = num;        int each[4];        int i = 0;        while(i < 4){            each[i] = temp/pow(10,3-i);            temp = temp % int(pow(10,3-i));            i++;        }                for(int i = 0; i < each[0]; i++){            ans += "M";        }        for(int j = 1; j < 4; j++){            if(j == 1){                a = "C";                b = "D";                c = "M";            }            else if (j == 2){                a = "X";                b = "L";                c = "C";            }            else{                a = "I";                b = "V";                c = "X";            }            if(each[j] <= 3){                for(int i = 0; i < each[j]; i++){                    ans += a;                }            }            else if(each[j] == 4){                ans += a;                ans += b;            }            else if(each[j] >= 5 && each[j] <= 8){                ans += b;                for(int i = 5; i < each[j]; i++){                    ans += a;                }            }            else if(each[j] == 9) {                ans += a;                ans += c;            }        }        return ans;    }};


由于题目给了int的范围(1 < num < 3999),我的思路是先得出四个数字,比如说3999,就是3,9,9,9。一个数字一个数字来分析,第一个数字最大只能是3,所以就根据其大小,输出多少个M,第一个数字为几,就输出几个M。

第二个数字到第四个数字的范围都是0 - 9,所以用abc来代表IVXLCDM等,第二个数字的abc为CDM,第三个数字的abc为XLC,第四个数字的abc为IVX。当数字范围在0-3时,数字为几就输出几个a,当数字范围为4时,就输出ab;当数字范围为5-8时,先输出b,然后该数减去5等于几,就输出几个a,当数字等于9时,就输出ac。


看了一下,这种方法耗时并不短,还不如那些直接打表的快......这就很难受了。

原创粉丝点击