标签:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
基本字符 | I | V | X | L | C | D | M |
对应阿拉伯数字 | 1 | 5 | 10 | 50 | 100 | 500 | 1000 |
string intToRoman(int num) { string M[]={"","M","MM","MMM"}; string C[]={"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"}; string X[]={"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"}; string I[]={"","I","II","III","IV","V","VI","VII","VIII","IX"}; return M[num/1000]+C[(num%1000)/100]+X[(num%100)/10]+I[(num%10)]; }
string intToRoman2(int num) { if (num>=1000) return "M"+intToRoman(num-1000); if (num>=900) return "CM"+intToRoman(num-900); if (num>=500) return "D"+intToRoman(num-500); if (num>=400) return "CD"+intToRoman(num-400); if (num>=100) return "C"+intToRoman(num-100); if (num>=90) return "XC"+intToRoman(num-90); if (num>=50) return "L"+intToRoman(num-50); if (num>=40) return "XL"+intToRoman(num-40); if (num>=10) return "X"+intToRoman(num-10); if (num>=9) return "IX"+intToRoman(num-9); if (num>=5) return "V"+intToRoman(num-5); if (num>=4) return "IV"+intToRoman(num-4); if (num>=1) return "I"+intToRoman(num-1); return ""; }
string intToRoman(int num) { for (int i=12;i>=0;i--) { if (inte[i]<=num) { return roman[i]+intToRoman(num-inte[i]); } } return ""; } private: int inte[13]={1,4,5,9,10,40,50,90,100,400,500,900,1000}; string roman[13]={"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};
#include <iostream> #include <string> #include <vector> using namespace std; int romanToInt(string s) ; string intToRoman(int num) ; string intToRoman1(int num); string intToRoman2(int num); void main() { int n=2549; cout<<n<<endl; string res=intToRoman(n) ; cout<<res<<endl; cout<<romanToInt(res)<<endl; string res1=intToRoman1(n) ; cout<<res1<<endl; cout<<romanToInt(res1)<<endl; string res2=intToRoman2(n) ; cout<<res2<<endl; cout<<romanToInt(res2); } string intToRoman(int num) { string M[]={"","M","MM","MMM"}; string C[]={"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"}; string X[]={"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"}; string I[]={"","I","II","III","IV","V","VI","VII","VIII","IX"}; return M[num/1000]+C[(num%1000)/100]+X[(num%100)/10]+I[(num%10)]; } int inte[13]={1,4,5,9,10,40,50,90,100,400,500,900,1000}; string roman[13]={"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"}; string intToRoman1(int num) { for (int i=12;i>=0;i--) { if (inte[i]<=num) { return roman[i]+intToRoman(num-inte[i]); } } return ""; } string intToRoman2(int num) { if (num>=1000) return "M"+intToRoman(num-1000); if (num>=900) return "CM"+intToRoman(num-900); if (num>=500) return "D"+intToRoman(num-500); if (num>=400) return "CD"+intToRoman(num-400); if (num>=100) return "C"+intToRoman(num-100); if (num>=90) return "XC"+intToRoman(num-90); if (num>=50) return "L"+intToRoman(num-50); if (num>=40) return "XL"+intToRoman(num-40); if (num>=10) return "X"+intToRoman(num-10); if (num>=9) return "IX"+intToRoman(num-9); if (num>=5) return "V"+intToRoman(num-5); if (num>=4) return "IV"+intToRoman(num-4); if (num>=1) return "I"+intToRoman(num-1); return ""; } int romanToInt(string s) { /*roman['I']=1; roman['V']=5; roman['X']=10; roman['L']=50; roman['C']=100; roman['D']=500; roman['M']=1000; */ char *p=new char[s.size()]; strcpy(p,s.c_str());//将string型转为char型数组 vector<int> array; array.resize(s.size()); int n=0; for (int i=0;i<s.size();i++) { switch (p[i]) { case 'I':array[i]=1;break; case 'V':array[i]=5;break; case 'X':array[i]=10;break; case 'L':array[i]=50;break; case 'C':array[i]=100;break; case 'D':array[i]=500;break; case 'M':array[i]=1000;break; default:cout<<"error\n"; } if (i==0) { n+=array[i]; } else { if (array[i]<=array[i-1]) { n+=array[i]; } else { n+=array[i]-2*array[i-1]; } } } return n; }
标签:
原文地址:http://blog.csdn.net/sinat_24520925/article/details/45602831