LeetCode(12)Integer to Roman

来源:互联网 发布:windows.old能不能删除 编辑:程序博客网 时间:2024/05/17 08:34

题目

Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.

分析

该题目要求将给定的1~3999之间的整型数字转换为罗马数字并输出。
解这道题我们必须了解罗马字母与整数之间的对应:
对应规则
对照举例如下:
对照举例

AC代码

class Solution {public:    string intToRoman(int num) {        //存储罗马数字        string str;        if (num == 0)            return "";        //(1)首先处理最高位千位数字        if (num >= 1000)        {            int count = num / 1000;            for (int i = 0; i < count; i++)                str += RomanLeter(1000);           //得到百位数            num %= 1000;           //链接其余三位数字对应的罗马序列            str += intToRoman(num);        }//else if        else if (num >= 100)        {            if (num >= 900)            {                str = str + RomanLeter(100) + RomanLeter(1000);                num %= 100;            }//if                           else if (num >= 500)            {                str += RomanLeter(500);                num -= 500;            }//else if            else if (num >= 400){                str = str + RomanLeter(100) + RomanLeter(500);                num -= 400;            }            else{                while (num >= 100)                {                    str += RomanLeter(100);                    num -= 100;                }//while            }            str += intToRoman(num);        }//else if        else if (num >= 10)        {            if (num >= 90)            {                str = str + RomanLeter(10) + RomanLeter(100);                num %= 10;            }//if            else if (num >= 50)            {                str += RomanLeter(50);                num -= 50;                          }            else if (num >= 40){                str = str + RomanLeter(10) + RomanLeter(50);                num -= 40;            }            else{                while (num >= 10)                {                    str += RomanLeter(10);                    num -= 10;                }            }            str += intToRoman(num);        }        else if (num >= 1)        {            if (num == 9)            {                str = str + RomanLeter(1) + RomanLeter(10);                num /= 10;            }            else if (num >= 5)            {                str += RomanLeter(5);                num -= 5;                           }            else if (num >= 4){                str = str + RomanLeter(1) + RomanLeter(5);                num -= 4;            }            else{                while (num >= 1)                {                    str += RomanLeter(1);                    num -= 1;                }            }            str += intToRoman(num);        }        else            str += "\0";        return str;    }    string RomanLeter(int n)    {        switch (n)        {        case 1:            return "I"; break;        case 5:            return "V"; break;        case 10:            return "X"; break;        case 50:            return "L"; break;        case 100:            return "C"; break;        case 500:            return "D"; break;        case 1000:            return "M"; break;        default:            return ""; break;        }    }};

Git测试程序代码

0 0