lc12-整数转罗马数字,罗马转整数

#include<stdio.h>
#include<string>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
string intToRoman(int num){//数字转罗马
    int base[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
    string str[]={ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX",
                "V", "IV", "I" };
    string roman="";
    int i=0;
    while(num!=0){
        if(num>=base[i]){
            num-=base[i];
            roman+=str[i];
            
        }
        else{
            i++;
        }
    }
    return roman;
}
int RomanToint(string str){
    int n=0;
    
    for(int i=0;i<str.length();i++)
    {   
        char c = str[i];
        if(c == 'I') n+=1;  
        if(c == 'V')n+=5;
        if(c == 'X') n+=10;
        if(c == 'L') n+=50;
        if(c == 'C') n+=100;
        if(c == 'D') n+=500;
        if(c == 'M') n+=1000;
    }
    int a=str.find("IV");
    if(a>=0){
        n-=2;
    }
    int b=str.find("IX");
    if(b>=0){
        n-=2;
    }
    int f=str.find("XL");
    if(f>=0){
        n-=20;
    }
    int c=str.find("XC");
    if(c>=0){
        n-=20;
    }
    int d=str.find("CD");
    if(d>=0){
        n-=200;
    }
    int e=str.find("CM");
    if(e>=0){
        n-=200;
    }
    
    return n;
}
void main(){
    //int num;
//  scanf("%d",&num);
//  string roman=intToRoman(num);
    
//  printf("%s",roman.c_str());//printf输出string类型需要调用c_str方法
    string str;
    cin>>str;//不能使用scanf输入,会使str.length()一直为0
    //scanf("%s",str);
    int t=RomanToint(str);
    printf("%d",t);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容