"Roman to Integer" and "Integer to Roman"
2016-06-30 10:03
190 查看
罗马计数法规律太多太麻烦,窝选择背代码_(:зゝ∠)_
int RomanToInt(string s) {
map<char, int> mp;
mp['I'] = 1;
mp['V'] = 5;
mp['X'] = 10;
mp['L'] = 50;
mp['C'] = 100;
mp['D'] = 500;
mp['M'] = 1000;
if (s.length() < 1) return 0;
int result = 0;
int sub = mp[s.at(0)];
int lastv = sub;
for (int i = 1; i < s.length(); ++i)
{
char curc = s.at(i);
int curv = mp[curc];
if (curv == lastv)
sub += curv;
else if (curv < lastv)
{
result += sub;
sub = curv;
}
else
{
sub = curv - sub;
}
lastv = curv;
}
result += sub;
return result;
}
string IntToRoman(int num)
{
int val[] = { 1000,900,500,400,100,90,50,40,10,9,5,4,1 };
string r[] = { "M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I" };
int cnt = 0;
string s = "";
while (num>0)
{
while (num >= val[cnt])
{
s += r[cnt];
num -= val[cnt];
}
cnt++;
}
return s;
}
int RomanToInt(string s) {
map<char, int> mp;
mp['I'] = 1;
mp['V'] = 5;
mp['X'] = 10;
mp['L'] = 50;
mp['C'] = 100;
mp['D'] = 500;
mp['M'] = 1000;
if (s.length() < 1) return 0;
int result = 0;
int sub = mp[s.at(0)];
int lastv = sub;
for (int i = 1; i < s.length(); ++i)
{
char curc = s.at(i);
int curv = mp[curc];
if (curv == lastv)
sub += curv;
else if (curv < lastv)
{
result += sub;
sub = curv;
}
else
{
sub = curv - sub;
}
lastv = curv;
}
result += sub;
return result;
}
string IntToRoman(int num)
{
int val[] = { 1000,900,500,400,100,90,50,40,10,9,5,4,1 };
string r[] = { "M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I" };
int cnt = 0;
string s = "";
while (num>0)
{
while (num >= val[cnt])
{
s += r[cnt];
num -= val[cnt];
}
cnt++;
}
return s;
}
相关文章推荐
- #杜甫诗作的主要内容#
- androidpn学习实践开端篇
- Android MVVM
- 2.5 Python变量与赋值
- 如何访问google?我教你
- 使用adb shell测试的批处理文件编写
- XListView开源框架的使用
- SQL Server常用语句
- Android 安全调查,OEM 厂商只有华为最积极打安全补丁
- 微信公众号支付开发配置
- webservice wsdl2Java 生成客户端代码
- 对我影响最大的三句话
- 枚举类型
- 短信验证
- 2.4 Python标识符
- C#通过创建Windows服务启动程序的方法详解
- iOS开发中的一些常用方法
- 纯css实现箭头,上下左右的箭头
- Android开发:计算缓存大小并且清空缓存
- Node.js简单介绍