zoukankan      html  css  js  c++  java
  • 第12题 数字转为罗马数字

    罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。

    一开始我按照10进制的思想来做,针对不同区间,编辑不同的罗马表达方式,比如1~9,10~90,100~900,1000~3000

    以下是代码:

    public static String intToRoman(int num) {
            
            //
            String roman = "";
            if(num<=0) return "";
            if(num<=10){
                String[] tens = new String[]{"I","II","III","IV","V","VI","VII","VIII","IX","X"};
                roman = roman+tens[num-1];
                
            }
            if(10<num && num<100){ //90以内都可以用I V X L表示
                String[] ten2nines = new String[] {"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"}; //10,20,30,40,50,60,70,80
                int H = ((int) (num/10));
                int L = num-H*10;
                roman = roman + ten2nines[H-1] + intToRoman(L);
            }
            
            if(100<=num && num<1000){
                String[] len = new String[] {"C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};//100,200,300,400,500,600,700,800,900
                int H = ((int) (num/100));
                int L = num-H*100;
                roman = roman + len[H-1] + intToRoman(L);
            }
            if(1000<=num && num <4000){
                String[] len = new String[] {"M","MM","MMM"};
                int H = ((int) (num/1000));
                int L = num-H*1000;
                System.out.println("H:"+H+",L:"+L);
                roman = roman + len[H-1] + intToRoman(L);
            }
            return roman;
        }

    后来看到网上有一个简便的,先找到所有罗马数字的基,对于十进制,基为(1,2,3,4,5,6,7,8,9,10),罗马数字的基为("M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"),对应数字(1000,900,500,400,100,90,50,40,10,9,5,4,1)

    以下为代码:

    public static String intToRoman(int num) {
            String data[] = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
            int value[] = {1000,900,500,400,100,90,50,40,10,9,5,4,1}, base = -1;
            StringBuilder result = new StringBuilder();
    
            for(int i = 0;i < data.length;i++){
                if((base=num/value[i])!=0){
                    while(base--!=0) result.append(data[i]);
                    num=num%value[i];
                }
            }
            return result.toString();
    }
  • 相关阅读:
    leetcode 1 两数之和
    leetcode 486 预测赢家
    leetcode 121 买卖股票的最佳时机
    leetcode 5 最长回文子串
    个人作业——软件工程实践总结作业
    个人作业——软件产品案例分析
    软件工程实践2017 个人技术博客
    软件工程实践2017结对项目——第二次作业
    软件工程实践2017结对项目——第一次作业
    课堂笔记(六)
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/5852385.html
Copyright © 2011-2022 走看看