算法第八次作业

来源:互联网 发布:手机淘宝红包怎么领取 编辑:程序博客网 时间:2024/05/17 09:31

题目:Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.
解析:
这道题第一点告诉我们的是:一定要学好英语~!roman numeral是罗马数字的意思。
第二点就是要见多识广,比如了解罗马数字构成(比如会百度百科)
题目本身不难,主要是在对罗马数字的理解上。比如大于3000的数字,先是千位,有num_M个M;然后在【900,1000)范围内加一个CM,剩下的899以内根据D(500)/CD(400)再进行划分!
代码:

class Solution {public:    string intToRoman(int num) {        string str;        int num_M=num/1000;        for(int i=0;i<num_M;i++)            str+='M';        num=num%1000;        if(num>=900){            str+="CM";            num-=900;        }        if(num>=400){            if(num<500){                str+="CD";                num-=400;            }else{                str+='D';                num-=500;            }        }        int num_C=num/100;        for(int j=0;j<num_C;j++){            str+='C';        }        num=num%100;        if(num>=90){            str+="XC";            num-=90;        }        if(num>=40){            if(num<50){                str+="XL";                num-=40;            }else{                str+='L';                num-=50;            }        }        int num_X=num/10;        for(int k=0;k<num_X;k++)            str+='X';        num=num%10;        if(num==9)//后面实在不想再动脑了            str+="IX";        if(num==8)            str+="VIII";        if(num==7)            str+="VII";        if(num==6)            str+="VI";        if(num==5)            str+="V";        if(num==4)            str+="IV";        if(num==3)            str+="III";        if(num==2)            str+="II";        if(num==1)            str+="I";        return str;    }};

然而,官网上有大神给出了一种极其精简的方法

public static String intToRoman(int num) {    String M[] = {"", "M", "MM", "MMM"};    String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};    String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};    String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};    return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];}

其实思想是类似的,不过它巧妙地运用String类,膜拜!

原创粉丝点击