• Integer to Roman


    Given an integer, convert it to a roman numeral.

    Input is guaranteed to be within the range from 1 to 3999.

    Analyse: Be cautious abou the expression of 4, 9 , 40, 90, 400, 900, they are IV, IX, XL, XC, CD, CM respectively. 

     1 class Solution {
     2 public:
     3     string intToRoman(int num) {
     4         string result;
     5         int times = num / 1000;
     6         if(times) result += numbers('M', times);
     7         int next = num % 1000;
     8         
     9         times = next / 500;
    10         if(times) result += numbers('D', times);
    11         next %= 500;
    12         
    13         times = next / 100;
    14         if(times){
    15             if(times == 4){
    16                 if(result[result.length()-1] == 'D'){
    17                     result[result.length()-1] = 'C';
    18                     result += 'M';
    19                 }
    20                 else result += "CD";
    21             } 
    22             else result += numbers('C', times);
    23         } 
    24         next %= 100;
    25         
    26         times = next / 50;
    27         if(times) result += numbers('L', times);
    28         next %= 50;
    29         
    30         times = next / 10;
    31         if(times){
    32             if(times == 4){
    33                 if(result[result.length()-1] == 'L'){
    34                     result[result.length()-1] = 'X';
    35                     result += 'C';
    36                 }
    37                 else result += "XL";
    38             } 
    39             else result += numbers('X', times);
    40         } 
    41         next %= 10;
    42         
    43         times = next / 5;
    44         if(times) result += numbers('V', times);
    45         next %= 5;
    46         
    47         times = next;
    48         if(times){
    49             if(times == 4){
    50                 if(result[result.length()-1] == 'V'){
    51                     result[result.length()-1] = 'I';
    52                     result += 'X';
    53                 }
    54                 else result += "IV";
    55             } 
    56             else result += numbers('I', times);
    57         }
    58         return result;
    59     }
    60     string numbers(char a, int times){
    61         string result;
    62         for(int i = 0; i < times; i++) result += a;
    63         return result;
    64     }
    65 };
  • 相关阅读:
    NOIP201105铺地毯
    50148155HYF旅游
    连通性判断
    传递消息1
    找朋友
    5796: 最短Hamilton路径(状压dp)
    2283: A Mini Locomotive(01背包)
    2616: Cow Frisbee Team(01背包)
    2593: Secret Message(字典树)
    Stammering Aliens(二分+Hash 卡过)
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4437915.html
Copyright © 2020-2023  润新知