C++之整数转化为罗马数字(11)---《那些奇怪的算法》
2017-10-15 11:07
525 查看
参考:《one-day-one-leetcode》
要求:将整形数字转化为罗马数字,我们都知道罗马数字有7个,分别为I(1),V(5),X(10),L(50),C(100),D(500),M(1000),这有个弊端,就是我们需要限制我们的输入在1~3999内,因为大于3999或者小于1无法使用罗马数字表示!
代码实现:
1)_simple我们列举了所有可能出现的情况,然后进行相应的匹配,代码逻辑简单;
2)第二种我们按照分类情况进行讨论,逻辑上比较简单,但是代码实现比较冗余。
运行结果:
要求:将整形数字转化为罗马数字,我们都知道罗马数字有7个,分别为I(1),V(5),X(10),L(50),C(100),D(500),M(1000),这有个弊端,就是我们需要限制我们的输入在1~3999内,因为大于3999或者小于1无法使用罗马数字表示!
代码实现:
1)_simple我们列举了所有可能出现的情况,然后进行相应的匹配,代码逻辑简单;
2)第二种我们按照分类情况进行讨论,逻辑上比较简单,但是代码实现比较冗余。
#include <iostream> #include <string> #include <vector> using namespace std; string intToRoman_simple(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 str = ""; for (int i = 0; i < sizeof(values) / sizeof(values[0]); i++){ string str_t = ""; while (num >= values[i]){ num -= values[i]; str_t += numerals[i]; } str += str_t; } return str; } string intToRoman(int num){ string str = ""; string roman[7] = { "I", "V", "X", "L", "C", "D", "M" }; int j = 0; while (num){ string str_t = ""; int temp = num % 10; if (temp < 4){ int count = temp; while (count--){ str_t += roman[j]; } } else if (temp == 4){ str_t += roman[j]; str_t += roman[j + 1]; } else if (temp >= 5 && temp <= 8){ str_t += roman[j + 1]; int count = temp - 5; while (count--){ str_t += roman[j]; } } else{ str_t += roman[j]; str_t += roman[j + 2]; } str = str_t + str; cout << str_t << endl; cout << str << endl; cout << "==================" << endl; num /= 10; j = j + 2; } return str; } int main(){ int num = 3745; cout << intToRoman_simple(num) << endl; return 0; }
运行结果:
相关文章推荐
- C++之罗马数字转换为整型数字(12)---《那些奇怪的算法》
- C++之数字容器装水问题(10)---《那些奇怪的算法》
- [LeetCode]12. Integer to Roman(整数转化为罗马数字)
- 简单的算法问题6——罗马数字转换成整数
- C++之树的层序遍历和深度优先遍历(先序遍历)(14)---《那些奇怪的算法》
- LeetCode--Roman to Integer 罗马数字转化成整数
- C++之最长回文字符串的判断(8)---《那些奇怪的算法》
- leetcode 罗马数字与整数的转换算法
- leetcode 罗马数字与整数的转换算法
- C++之实现两个链表合并(迭代和递归版本)(19)---《那些奇怪的算法》
- C++之最长公共子序列(21)---《那些奇怪的算法》
- 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了,logn的算法复杂度
- Google算法题:M-罗马数字与整数互转
- [LintCode] Roman to Integer 罗马数字转化成整数
- C++实现两个有序链表合并(17)---《那些奇怪的算法》
- C++之平衡二叉树的判定(25)---《那些奇怪的算法》
- C++之归并排序(7)---《那些奇怪的算法》
- Roman to Integer 罗马数字转化成整数
- 【LeetCode-面试算法经典-Java实现】【013-Roman to Integer (罗马数字转成整数)】
- C++之实现大顶堆(1)---《那些奇怪的算法》