Java经典题:罗马数字和阿拉伯数字的相互转换

  1. package Linkedin;
  2. public class RomeToArabic {
  3.     public static void main(String[] args) {
  4.         String s = “IV”;
  5.         System.out.println(r2a(s));
  6.         System.out.println(a2r(34));
  7.     }
  8.     //罗马数字转阿拉伯数字:
  9.     // 从前往后遍历罗马数字,如果某个数比前一个数小,则把该数加入到结果中;
  10.     // 反之,则在结果中两次减去前一个数并加上当前这个数;
  11.     // I、V、X、   L、   C、     D、     M
  12.     // 1.5、10、50、100、500、1000
  13.     private static int r2a(String in){
  14.         int graph[] = new int[400];
  15.         graph[‘I’] = 1;
  16.         graph[‘V’]=5;
  17.         graph[‘X’]=10;
  18.         graph[‘L’]=50;
  19.         graph[‘C’]=100;
  20.         graph[‘D’]=500;
  21.         graph[‘M’]=1000;
  22.         char[] num = in.toCharArray();
  23.         // 遍历这个数,用sum来总计和
  24.         int sum = graph[num[0]];
  25.         for(int i=0; i<num.length-1; i++){
  26.             // 如果,i比i+1大的话,直接相加
  27.             if(graph[num[i]] >= graph[num[i+1]]){
  28.                 sum += graph[num[i+1]];
  29.             }
  30.             // 如果i比i+1小的话,则将总和sum减去i这个地方数的两倍,同时加上i+1
  31.             // 就相当于后边的数比左边的数大,则用右边的数减左边的数
  32.             else{
  33.                 sum = sum + graph[num[i+1]] – 2*graph[num[i]];
  34.             }
  35.         }
  36.         return sum;
  37.     }
  38.     // 阿拉伯数字转罗马数字:
  39.     // 把所有小数字在前的组合也作为基本数字,再做一个对应的数值表就可以解决问题了。
  40.     // I、V、X、   L、   C、     D、     M
  41.     // 1.5、10、50、100、500、1000
  42.     private static String a2r(int aNumber){
  43.         if(aNumber < 1 || aNumber > 3999){
  44.             return “-1”;
  45.         }
  46.         int[] aArray = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
  47.         String[] rArray = {“M”,”CM”,”D”,”CD”,”C”,”XC”,”L”,”XL”,”X”,”IX”,”V”,”IV”,”I”};
  48.         String rNumber = “”;
  49.         for(int i=0; i<aArray.length; i++){
  50.             while(aNumber >= aArray[i]){
  51.                 rNumber += rArray[i];
  52.                 aNumber -= aArray[i];
  53.             }
  54.         }
  55.         return rNumber;
  56.     }
  57. }

标签

发表评论

评论已关闭。

评论列表(1)

  • 宿舍

    2014.11.30 19:11

    这尼玛也太吊了