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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值