@表示有更优解法

https://oj.leetcode.com/problems/integer-to-roman/

将自然数,转换成罗马数字,输入范围为 1 ~ 3999,因为罗马数没有0.

用一个map,表示 1 ~ 9, 10 ~ 90, 100 ~ 900, 1000 ~ 3000,然后,把相应的罗马字母存起来。

之后,求出输入有几个 1000 ,几个 100 ,几个1来。

#include <iostream>
#include <map>
#include <string>
using namespace std; class Solution { public:
string intToRoman(int num) {
map<int,string> I2R;
I2R.insert(make_pair( ,"I"));
I2R.insert(make_pair( ,"II"));
I2R.insert(make_pair( ,"III"));
I2R.insert(make_pair( ,"IV"));
I2R.insert(make_pair( ,"V"));
I2R.insert(make_pair( ,"VI"));
I2R.insert(make_pair( ,"VII"));
I2R.insert(make_pair( ,"VIII"));
I2R.insert(make_pair( ,"IX"));
I2R.insert(make_pair( ,"X"));
I2R.insert(make_pair( ,"XX"));
I2R.insert(make_pair( ,"XXX"));
I2R.insert(make_pair( ,"XL"));
I2R.insert(make_pair( ,"L"));
I2R.insert(make_pair( ,"LX"));
I2R.insert(make_pair( ,"LXX"));
I2R.insert(make_pair( ,"LXXX"));
I2R.insert(make_pair( ,"XC"));
I2R.insert(make_pair( ,"C"));
I2R.insert(make_pair( ,"CC"));
I2R.insert(make_pair( ,"CCC"));
I2R.insert(make_pair( ,"CD"));
I2R.insert(make_pair( ,"D"));
I2R.insert(make_pair( ,"DC"));
I2R.insert(make_pair( ,"DCC"));
I2R.insert(make_pair( ,"DCCC"));
I2R.insert(make_pair( ,"CM"));
I2R.insert(make_pair( ,"M"));
I2R.insert(make_pair( ,"MM"));
I2R.insert(make_pair( ,"MMM")); string ans; int this_time = ;
for(int jinzhi = ; jinzhi > ; jinzhi = jinzhi / )
{
this_time = num / jinzhi;
this_time = this_time * jinzhi;
if(this_time > )
ans = ans + I2R[this_time];
num = num % jinzhi;
} return ans;
}
};

更优解法,来自九章。

/**
* Copyright: NineChapter
* - Algorithm Course, Mock Interview, Interview Questions
* - More details on: http://www.ninechapter.com/
*/ public class Solution {
public String intToRoman(int num) {
if(num <= ) {
return "";
}
int[] nums = {, , , , , , , , , , , , };
String[] symbols = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
StringBuilder res = new StringBuilder();
int digit=;
while (num > ) {
int times = num / nums[digit];
num -= nums[digit] * times;
for ( ; times > ; times--) {
res.append(symbols[digit]);
}
digit++;
}
return res.toString();
}
}

最新文章

  1. [bigdata] 使用Flume hdfs sink, hdfs文件未关闭的问题
  2. js原型对象与Java类的比较
  3. 函数fsp_fill_free_list
  4. Extjs 实现输入数量,实时更改总价
  5. exec、eval
  6. HDOJ2003求绝对值
  7. android平台获取手机IMSI,IMEI ,序列号,和 手机号的方法
  8. 从MSN上拔下来的全世界国家下拉框(附带SQL执行脚本)
  9. &lt;hdu - 1272&gt; 小希的迷宫 并查集问题 (注意特殊情况)
  10. Windows下将ImageMagick移植到Android平台
  11. SQL中锁表语句简单理解(针对于一个表)
  12. vue初尝试--新建项目
  13. Zookeeper动态更新服务器列表
  14. 解决Centos7 yum 出现could not retrieve mirrorlist 错误
  15. linux基础命令--groupdel 删除群组
  16. ogg 12.3 for sqlserver 2016/2014 CDC模式配置
  17. 配置apache虚拟域名(phpStudy2016)
  18. 团队作业4——beta阶段冲刺
  19. MYSQL之MHA集群
  20. xfs参数简介

热门文章

  1. python3 练习题100例 (十二)
  2. 使用JFreeChart生成报表
  3. C++构造函数使用的多种方法
  4. POJ:2185-Milking Grid(KMP找矩阵循环节)
  5. 江西理工大学编程俱乐部 2328 Star
  6. 继承Thread类使用多线程
  7. Cannot set property &#39;innerHTML&#39; of null 问题的解决
  8. c++ 吕凤翥 第五章 类对象一
  9. Leetcode 502.IPO
  10. 软工实践 - 第九次作业 Alpha 冲刺 (1 / 10)