• 计蒜客 挑战难题 整数转换成罗马数字


    给定一个整数num,( 1<=num<=3999),将整数转换成罗马数字。

    如1,2,3,4,5对应的罗马数字分别位I,II,III,IV,V等。

    格式:

       第一行输入一个整数,接下来输出对应的罗马数字。

    提示:

       罗马数字的常识见此链接,对做题有帮助哦~尤其是表示方法。

    http://baike.baidu.com/link?url=injU8M4bAoc2zRZQ1GtgrfvuzCJO9PLnq6fpQGJLenakbzo-rS8p-qsYHR_81-aN

    样例输入

    123

    样例输出

    CXXIII

    ========================================
    第一次code:
     1 import java.util.Scanner;
     2 public class Main
     3 { 
     4     public static void main(String[] args) 
     5     { 
     6         Scanner input = new Scanner(System.in);
     7         System.out.println(run(input.nextInt()));
     8     }
     9     public static String run(int n)
    10     {
    11         String a="",b="",c="",d="",e="";
    12         /**
    13          * 轉化千位數
    14          */
    15         if((n/1000)%10 > 0)
    16         {
    17             for(int i=0;i<(n/1000)%10;i++)
    18             {
    19                 d +="M";
    20             }
    21         }
    22         /**
    23          * 轉換百位數
    24          */
    25         if((n/100)%10 > 0)
    26         {
    27             switch((n/100)%10)
    28             {
    29                 case 1: c="C";break;
    30                 case 2: c="CC";break;
    31                 case 3: c="CCC";break;
    32                 case 4: c="CD";break;
    33                 case 5: c="D";break;
    34                 case 6: c="DC";break;
    35                 case 7: c="DCC";break;
    36                 case 8: c="DCCC";break;
    37                 case 9: c="CM";break;
    38             }
    39         }
    40         /**
    41          * 轉化十位數
    42          */
    43         if((n/10)%10 > 0)
    44         {
    45             switch((n/10)%10)
    46             {
    47                 case 1: b="X";break;
    48                 case 2: b="XX";break;
    49                 case 3: b="XXX";break;
    50                 case 4: b="XL";break;
    51                 case 5: b="L";break;
    52                 case 6: b="LX";break;
    53                 case 7: b="LXX";break;
    54                 case 8: b="LXXX";break;
    55                 case 9: b="XC";break;
    56             }
    57         }
    58         /**
    59          * 轉換個位數
    60          */
    61         if(n%10 > 0)
    62         {
    63             switch(n%10)
    64             {
    65                 case 1: a="I";break;
    66                 case 2: a="II";break;
    67                 case 3: a="III";break;
    68                 case 4: a="IV";break;
    69                 case 5: a="V";break;
    70                 case 6: a="VI";break;
    71                 case 7: a="VII";break;
    72                 case 8: a="VIII";break;
    73                 case 9: a="IX";break;
    74             }
    75         }
    76         e =  d + c + b + a;
    77         return e;
    78     }
    79 }


    时间效率: 43毫秒

    =============================

    第二次code:

     1 import java.util.Scanner;
     2 
     3 public class Main
     4 { 
     5     public static void main(String[] args) 
     6     { 
     7         Scanner input = new Scanner(System.in);
     8         System.out.println(run(input.nextInt()));
     9     }
    10     public static String run(int n)
    11     {
    12         String e="",d="",c="",b="",a="";
    13         String [] aa = {"I","II","III","IV","V","VI","VII","VIII","IX"};  //个位替换
    14         String [] bb = {"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};  //十位替换
    15         String [] cc = {"C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};  //百位替换
    16         String [] dd = {"M","MM","MMM"};                                  //千位替换
    17         /**
    18          * 轉化千位數
    19          */
    20         if((n/1000)%10 > 0)
    21         {
    22             d = dd[(n/1000)%10 - 1];
    23         }
    24         /**
    25          * 轉換百位數
    26          */
    27         if((n/100)%10 > 0)
    28         {
    29             c = cc[(n/100)%10 - 1];
    30         }
    31         /**
    32          * 轉化十位數
    33          */
    34         if((n/10)%10 > 0)
    35         {
    36             b = bb[(n/10)%10 - 1];
    37         }
    38         /**
    39          * 轉換個位數
    40          */
    41         if(n%10 > 0)
    42         {
    43             a = aa[n%10 - 1];
    44         }
    45         e =  d + c + b + a;
    46         return e;
    47     }
    48 }

    时间效率:35毫秒。

  • 相关阅读:
    [SinGuLaRiTy] NOIP模拟题 by liu_runda
    [SinGuLaRiTy] NOIP互测模拟赛
    [SinGuLaRiTy] Nescafe 24杯模拟赛
    [SinGuLaRiTy] 复习模板-搜索
    [SinGuLaRiTy] 复习模板-高精度模板
    [SinGuLaRiTy] 复习模板-图论
    [SinGuLaRiTy] 复习模板-数据结构
    [SinGuLaRiTy] 高级搜索算法
    [SinGuLaRiTy] 2017 百度之星程序设计大赛 复赛
    [SinGuLaRiTy] 2017 百度之星程序设计大赛 初赛B
  • 原文地址:https://www.cnblogs.com/niithub/p/5809845.html
Copyright © 2020-2023  润新知