LeetCode-Integer to Roman

来源:互联网 发布:spss mac 23 序列号 编辑:程序博客网 时间:2024/06/06 13:25

题目

给定一个整数,把它转换为一个罗马数字。

给定数字的范围为:1-3999

示例

输入:1976 输出:”MCMLXXVI”

分析

罗马数字的构成如下:

I    V    X    L    C    D    M1    5    10   50   100  500  1000

上述是最基本的罗马数字,如1600可表示为MDC

但是,如果用IIII表示4显然有点麻烦,所以又提出了下列的表示:

IV   IX   XL   XC   CD   CM4    9    40   90   400  900

所以可以将数据分段处理:

  1. >= 1000,”M”,自减1000
  2. >= 900,”CM”自减900
  3. >= 500,”D”自减500
  4. >= 400,”CD”自减400
  5. >= 100,”C”自减100
  6. >= 90,”XC”自减90
  7. >= 50,”L”自减50
  8. >= 10,”X”自减10
  9. >= 9,”IX”自减9
  10. >=5 ,”V”自减5
  11. >= 4,”IV”自减4
  12. >= 1,”I”自减1

流程

  1. 如果大于0
  2. 转换
    1. >= 1000,”M”,自减1000
    2. >= 900,”CM”自减900
    3. >= 500,”D”自减500
    4. >= 400,”CD”自减400
    5. >= 100,”C”自减100
    6. >= 90,”XC”自减90
    7. >= 50,”L”自减50
    8. >= 10,”X”自减10
    9. >= 9,”IX”自减9
    10. >=5 ,”V”自减5
    11. >= 4,”IV”自减4
    12. >= 1,”I”自减1

代码

 string intToRoman(int num)  {       char ch[20] = {};       int iCout = 0;       while (num > 0)       {           if (num >= 1000)           {               ch[iCout++] = 'M';               num -= 1000;           }           else if (num >= 900)           {               ch[iCout++] = 'C';               ch[iCout++] = 'M';               num -= 900;           }           else if (num >= 500)           {               ch[iCout++] = 'D';               num -= 500;           }           else if (num >= 400)           {               ch[iCout++] = 'C';               ch[iCout++] = 'D';               num -= 400;           }           else if (num >= 100)           {               ch[iCout++] = 'C';               num -= 100;           }           else if (num >= 90)           {               ch[iCout++] = 'X';               ch[iCout++] = 'C';               num -= 90;           }           else if (num >= 50)           {               ch[iCout++] = 'L';               num -= 50;           }           else if (num >= 40)           {               ch[iCout++] = 'X';               ch[iCout++] = 'L';               num -= 40;           }           else if (num >= 10)           {               ch[iCout++] = 'X';               num -= 10;           }           else if (num >= 9)           {               ch[iCout++] = 'I';               ch[iCout++] = 'X';               num -= 9;           }           else if (num >= 5)           {               ch[iCout++] = 'V';               num -= 5;           }           else if (num >= 4)           {               ch[iCout++] = 'I';               ch[iCout++] = 'V';               num -= 4;           }           else           {               ch[iCout++] = 'I';               num -= 1;           }       }       return ch;   }

完整代码

GitHub

0 0
原创粉丝点击