Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <iostream>
- #include <string>
- #include <algorithm>
- using namespace std;
- string intToRoman(int n)
- {
- string temp="\0";
- while(n>0){
- if(n>999){
- n-=1000;
- temp += "M";
- }else if(n>899){
- n-=900;
- temp += "CM";
- }else if(n>499){
- n-=500;
- temp += "D";
- }else if(n>399){
- n-=400;
- temp += "CD";
- }else if(n>99){
- n-=100;
- temp += "C";
- }else if(n>89){
- n-=90;
- temp += "XC";
- }else if(n>49){
- n-=50;
- temp += "L";
- }else if(n>39){
- n-=40;
- temp += "XL";
- }else if(n>9){
- n-=10;
- temp += "X";
- }else if(n>8){
- n-=9;
- temp += "IX";
- }else if(n>4){
- n-=5;
- temp += "V";
- }else if(n>3){
- n-=4;
- temp += "IV";
- }else if(n>=1){
- n--;
- temp += "I";
- }
- }
- return (temp);
- }
- int romanToInt(string str)
- {
- //Make sure your string is uppercase
- for(unsigned int i=0;i<str.length();i++)
- {
- str[i] = toupper(str[i]);
- }
- int sum=0;
- for(unsigned int i=0;i<str.length();i++)
- {
- switch(str[i]){
- case 'M':
- sum += 1000;
- break;
- case 'D':
- sum += 500;
- break;
- case 'C':
- sum = (str[i+1]=='M' || str[i+1]=='D')? sum-100 : sum+100;
- break;
- case 'L':
- sum += 50;
- break;
- case 'X':
- sum = (str[i+1]=='C' || str[i+1]=='L')? sum-10 : sum+10;
- break;
- case 'V':
- sum = (str[i+1]=='X' || str[i+1]=='L')? sum-5 : sum+5;
- break;
- case 'I':
- sum = (str[i+1]=='X' || str[i+1]=='V')? sum-1 : sum+1;
- break;
- }
- }
- return sum;
- }
- int main()
- {
- string s = "MmMCVLXii"; //We will uppercase this
- cout << romanToInt(s) << endl;
- cout << intToRoman(romanToInt(s)) << endl;
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment