思路:拿到题,先读清题,将题意理解无误。
通过分析示例,发现,可用来组成结果的字符有
* I 1
* V 5
* X 10
* L 50
* C 100
* D 500
* M 1000
//右边减左边这种特殊规则只适用于以下六种情况
//IV 4 IX 9
//XL 40 XC 90
//CD 400 CM 900
那么问题来了,输入一个数之后,程序怎么知道它是由哪些数拼成的呢???
输入一个数,譬如3215,需要得出它是由3个1000组成,2个100组成,1个10组成,5个1组成。
用“枚举”法
public class NumRoman {
static String Numroman(int x)
{
int a=x/1000;//千位
int b=x%1000/100;
int c=x%100/10;
int d=x%10;
String s="";
if(a==1) s+="M";
if(a==2) s+="MM";
if(a==3) s+="MMM";
if(b==1) s+="C";
if(b==2) s+="CC";
if(b==3) s+="CCC";
if(b==4) s+="CD";
if(b==5) s+="D";
if(b==6) s+="DC";
if(b==7) s+="DCC";
if(b==8) s+="DCCC";
if(b==9) s+="CM";
if(c==1) s+="X";
if(c==2) s+="XX";
if(c==3) s+="XXX";
if(c==4) s+="XL";
if(c==5) s+="L";
if(c==6) s+="LX";
if(c==7) s+="LXX";
if(c==8) s+="LXXX";
if(c==9) s+="XC";
if(d==1) s+="I";
if(d==2) s+="II";
if(d==3) s+="III";
if(d==4) s+="IV";
if(d==5) s+="V";
if(d==6) s+="VI";
if(d==7) s+="VII";
if(d==8) s+="VIII";
if(d==9) s+="IX";
return s;
}
static boolean RomanNumOK(String s)
{
for(int i=0;i<4000;i++)
{
if(s.equals(Numroman(i)))
return true;
}
return false;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(Numroman(3125));
}
}