Difficulty: Medium
这个暑假做的第一个中等题,思路和#13一样的,一点都不难,但是在string处理上花了点时间,收获不少。
#include <iostream>
#include <math.h>
#include <cstring>
using namespace std;
string toString(int a, int b){
string s;
char c1,c2,c3;
switch(a){
case(0):
c1='M';
break;
case(1):
c1='C';
c2='D';
c3='M';
break;
case(2):
c1='X';
c2='L';
c3='C';
break;
case(3):
c1='I';
c2='V';
c3='X';
break;
default:
break;
}
switch(b){
case(1):
s= s+c1;
break;
case(2):
s = s+c1+c1;
break;
case(3):
s = s+c1+c1+c1;
break;
case(4):
s= s+c1+c2;
break;
case(5):
s= s+c2;
break;
case(6):
s= s+c2+c1;
break;
case(7):
s= s+c2+c1+c1;
break;
case(8):
s= s+c2+c1+c1+c1;
break;
case(9):
s= s+c1+c3;
break;
default:
break;
}
return s;
}
string intToRoman(int num) {
int a[4] = {0};
string s,ans;
for(int i=0; i<4; i++)
{
double n1 =(pow(10,(3-i)));
int n =n1;
a[i] = num/n;
num = num%n;
if(a[i]!=0){
s = toString(i,a[i]);
ans = ans + s;
}
}
cout<<ans<<endl;
return ans;
}
int main()
{
int x;
cin>>x;
intToRoman(x);
return 0;
}