题目:
罗马数字由七个不同的符号表示:I,V,X,L,C,D和M。
符号值。
I 1。
V 5。
X 10。
L 50。
C 100。
D 500。
M 1000。
例如,两个用罗马数字写成二,只有两个一个加在一起。十二写成,十二,也就是简单的X+II。数字二十七写成二十七,即XX+V+II。
罗马数字通常从左到右写成从大到小。但是,四的数字不是三。相反,数字4被写成IV。因为1在5之前,我们把它减为4。同样的原则也适用于数字9,它被写为IX。使用减法的情况有六种:
我可以放在V(5)和X(10)之前,得到4和9。
X可以放在L(50)和C(100)之前,使之成为40和90。
C可以放在D(500)和M(1000)之前,得到400和900。
给定一个整数,将其转换为罗马数字。输入保证在1到3999之间。
示例1:
输入:3输出:“III”
示例2:输入:4输出:“IV”
示例3:输入:9输出:“IX”
示例4:输入:58输出:LVIII解释:l=50,V=5,III=3。
例5:输入:1994 输出:MCMXCIV解释:M=1000,CM=900,=90,IV=4。
思想:麻烦了一点的判断。把这个数由个位开始拆分,判断每一个分位的罗马数字即可。
class Solution {
public String intToRoman(int num) {
String s="";
int tag=1;
int member=0;
while(num>0){
//拆分每个位置的分位
member=(num%10)*tag;
System.out.println(member);
tag=tag*10;
if(member>0 && member<=10){
if(member==4){
s="IV"+s;
}else if(member==9){
s="IX"+s;
}else if(member==5){
s="V"+s;
}else if(member==10){
s="X"+s;
}else{
if(member<5){
for(int i=1;i<=member;i++){
s="I"+s;
}
}else{
String a="";
a="V";
for(int i=1;i<=member-5;i++){
a=a+"I";
}
s=a+s;
}
}
}
else if(member>10 && member<=100){
if(member==40){
s="XL"+s;
}else if(member==90){
s="XC"+s;
}else if(member==50){
s="L"+s;
}else if(member==100){
s="C"+s;
}else{
if(member<50){
for(int i=10;i<=member;i=i+10){
s="X"+s;
}
}else{
String a="";
a="L";
for(int i=10;i<=member-50;i=i+10){
a=a+"X";
}
s=a+s;
}
}
}
else if(member>100 && member<=1000){
if(member==400){
s="CD"+s;
}else if(member==900){
s="CM"+s;
}else if(member==500){
s="D"+s;
}else if(member==1000){
s="M"+s;
}else{
if(member<500){
for(int i=100;i<=member;i=i+100){
s="C"+s;
}
}else{
String a="";
a="D";
for(int i=100;i<=member-500;i=i+100){
a=a+"C";
}
s=a+s;
}
}
}
else{
for(int i=1000;i<=member;i=i+1000){
s="M"+s;
}
}
num=num/10;
}
return s;
}
}
今天的题目我做的稍微麻烦了。