这道题目意思读懂了就很容易做了,就是将数字转化成对应的罗马符号,对应转化关系表格已经全部给出来了,那么知道题目要注意的就是对于一个多位数是从高位到地位顺次转化,其实就是一道模拟题,easy,但是我wrong answer了两次,由于转化比较繁琐,所以要格外注意细节,另外就是提交格式,下面是代码:
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <algorithm>
#define Max 10010
using namespace std;
struct Str{
int value;
char s[20];
}str[Max];
int p[4];
int t,n;
bool cmp(const Str p,const Str q){
return strcmp(p.s,q.s)<=0;
}
int main(){
scanf("%d",&t);
while(t--){
scanf("%d",&n);
int i,j;
for(i=0;i<n;i++){
scanf("%d",&str[i].value);
int k=0,temp=str[i].value;
while(temp){
p[k++]=temp%10;
temp/=10;
}
int index=k;
k=0;
for(j=index-1;j>=0;j--){
//
switch(j){
case 3:
switch(p[j]){
case 1: str[i].s[k++]='M'; break;
case 2:
str[i].s[k++]='M';
str[i].s[k++]='M';
break;
case 3:
str[i].s[k++]='M';
str[i].s[k++]='M';
str[i].s[k++]='M';
}
break;
//
case 2:
switch(p[j]){
case 1:
str[i].s[k++]='C';
break;
case 2:
str[i].s[k++]='C';
str[i].s[k++]='C';
break;
case 3:
str[i].s[k++]='C';
str[i].s[k++]='C';
str[i].s[k++]='C';
break;
case 4:
str[i].s[k++]='C';
str[i].s[k++]='D';
break;
case 5:
str[i].s[k++]='D';
break;
case 6:
str[i].s[k++]='D';
str[i].s[k++]='C';
break;
case 7:
str[i].s[k++]='D';
str[i].s[k++]='C';
str[i].s[k++]='C';
break;
case 8:
str[i].s[k++]='D';
str[i].s[k++]='C';
str[i].s[k++]='C';
str[i].s[k++]='C';
break;
case 9:
str[i].s[k++]='C';
str[i].s[k++]='M';
break;
}
break;
case 1:
//
switch(p[j]){
case 1:
str[i].s[k++]='X';
break;
case 2:
str[i].s[k++]='X';
str[i].s[k++]='X';
break;
case 3:
str[i].s[k++]='X';
str[i].s[k++]='X';
str[i].s[k++]='X';
break;
case 4:
str[i].s[k++]='X';
str[i].s[k++]='L';
break;
case 5:
str[i].s[k++]='L';
break;
case 6:
str[i].s[k++]='L';
str[i].s[k++]='X';
break;
case 7:
str[i].s[k++]='L';
str[i].s[k++]='X';
str[i].s[k++]='X';
break;
case 8:
str[i].s[k++]='L';
str[i].s[k++]='X';
str[i].s[k++]='X';
str[i].s[k++]='X';
break;
case 9:
str[i].s[k++]='X';
str[i].s[k++]='C';
break;
}
break;
//
case 0:
switch(p[j]){
case 1:
str[i].s[k++]='I';
break;
case 2:
str[i].s[k++]='I';
str[i].s[k++]='I';
break;
case 3:
str[i].s[k++]='I';
str[i].s[k++]='I';
str[i].s[k++]='I';
break;
case 4:
str[i].s[k++]='I';
str[i].s[k++]='V';
break;
case 5:
str[i].s[k++]='V';
break;
case 6:
str[i].s[k++]='V';
str[i].s[k++]='I';
break;
case 7:
str[i].s[k++]='V';
str[i].s[k++]='I';
str[i].s[k++]='I';
break;
case 8:
str[i].s[k++]='V';
str[i].s[k++]='I';
str[i].s[k++]='I';
str[i].s[k++]='I';
break;
case 9:
str[i].s[k++]='I';
str[i].s[k++]='X';
break;
}
break;
}
}
str[i].s[k]='\0';
}
sort(str,str+n,cmp);
printf("%d",str[0].value);
for(i=1;i<n;i++)
printf(" %d ",str[i].value);
printf("\n");
}
return 0;
}