leetcode刷题,总结, 记录,备忘 12

来源:互联网 发布:罗杰疑案知乎 编辑:程序博客网 时间:2024/06/03 09:16

leetcode12Integer to Roman

Given an integer, convert it to a roman numeral.

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

之前那个题的姊妹篇,首先强调!没什么难的,,,把罗马数字的规则搞搞清楚就行了,,,我写的代码写的太多了,,,全是if,else if各种判断条件,,感觉写的很不好,虽然通过了,,有空去看看别人是怎么写的。。。。具体详细就不描述了,,还是那一老套的东西,,关键搞清楚罗马数字的规则就行了,还是很简单的。

class Solution {public:    string intToRoman(int num) {      int temp, m, d = 1000, count = 4;      string s;      while (count)      {          temp = num / d;          if (!temp)          {              count--;              d /= 10;              continue;          }          num %= d;          if (d == 1000)          s += string(temp, 'M');          else if (d == 100)          {              if (temp == 9)              s += "CM";              else if (temp > 5 && temp < 9)              s += "D" + string(temp-5, 'C');              else if (temp < 5 && temp > 3)              s += string(5-temp, 'C') + "D";              else if (temp == 5)              s += "D";              else               s += string(temp, 'C');          }          else if (d == 10)          {            if (temp == 9)            s += string("XC");            else if(temp < 9 && temp > 5)            s += "L" + string(temp-5, 'X');            else if (temp < 5 && temp > 3)            s += string(5-temp, 'X') + 'L';            else if (temp == 5)            s += "L";            else             s += string(temp, 'X');          }          else if (d == 1)          {              if (temp == 9)              s += "IX";              else if (temp > 5 && temp < 9)              s += "V" + string(temp-5, 'I');              else if(temp == 5)              s += "V";              else if (temp == 4)              s += "IV";              else if (temp < 4)              s += string(temp-0, 'I');          }          count--;          d /= 10;      }      return s;    }};

0 0
原创粉丝点击