problem:

Given an integer, convert it to a roman numeral.

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

将1-3999的整数转换为罗马数字

thinking:

(1)

对比举例



个位数举例

Ⅰ,1 】Ⅱ。2】 Ⅲ,3】 Ⅳ,4 】Ⅴ。5 】Ⅵ,6】Ⅶ。7】 Ⅷ,8 】Ⅸ。9 】

十位数举例

Ⅹ。10】 Ⅺ,11 】Ⅻ,12】 XIII,13】 XIV,14】 XV,15 】XVI,16 】XVII,17 】XVIII,18】 XIX,19】 XX,20】 XXI,21 】XXII,22 】XXIX,29】 XXX,30】 XXXIV,34】 XXXV,35 】XXXIX,39】 XL,40】 L,50 】LI,51】 LV,55】 LX,60】 LXV,65】 LXXX,80】 XC,90 】XCIII,93】 XCV,95 】XCVIII,98】 XCIX,99 】

百位数举例

C,100】 CC,200 】CCC,300 】CD,400】 D,500 】DC,600 】DCC,700】 DCCC,800 】CM,900】 CMXCIX,999】

千位数举例

M,1000】 MC,1100 】MCD,1400 】MD,1500 】MDC,1600 】MDCLXVI,1666】 MDCCCLXXXVIII,1888 】MDCCCXCIX,1899 】MCM,1900 】MCMLXXVI,1976】 MCMLXXXIV,1984】 MCMXC,1990 】MM,2000 】MMMCMXCIX,3999】

(2)避免N多条件推断的技巧:利用罗马数字自身的规律。减去一个基数。来简化复杂度

code:

class Solution {
public:
string intToRoman(int num)
{
int values[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
string numerals[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
string result;
for (int i = 0; i < 13; i++) {
while (num >= values[i]) {
num -= values[i];
result.append(numerals[i]);
}
}
return result;
}
};

最新文章

  1. dsp28377控制DM9000收发数据——第三版程序,通过外部引脚触发来实现中断接受数据,优化掉帧现象
  2. 数据挖掘之决策树ID3算法(C#实现)
  3. Dell_R710 centos5.4 网卡(BCM5709)中断故障解决
  4. WCF MSMQ消息队列与离线操作
  5. phalcon框架学习之router
  6. IPC_共享内存
  7. 十一、Android学习笔记_AsyncQueryHandler的应用
  8. Hrbust 2240 土豪的时代
  9. javascrip中array使用
  10. 单元测试之C/C++
  11. Css 使div标签下沉到页面最低部
  12. Structured-Streaming之窗口操作
  13. 小程序之Tab切换(二)
  14. C语言第二次博客作业
  15. scipy插值与拟合
  16. LeetCode - 767. Reorganize String
  17. Chrome Inspect调试stetho出现空白的解决方法
  18. C#面向对象设计的七大原则
  19. gcc 工作流程
  20. python实现最大重叠子串的查找

热门文章

  1. 函数buf_LRU_get_free_only
  2. vbox android x86 分辨率
  3. 普通方式 分页【NOT IN】和【&gt;】效率大PK 千万级别数据测试结果
  4. 深入理解Arrays.sort()
  5. (转)MySQL数据库引擎ISAM MyISAM HEAP InnoDB的区别
  6. Maven使用教程
  7. MAT文件操作
  8. 关于SQL中的Update语句
  9. (转载)HTML与XHTML有什么区别
  10. 基于寄存器的VM