計蒜客 -- 羅馬數字轉換成整數
阿新 • • 發佈:2019-01-05
給定一個羅馬數字 s,將羅馬數字轉換成整數。
如羅馬數字I,II,III,IV,V分別代表數字 1, 2, 3, 4, 5。
首先要來了解一下羅馬數字表示法,基本字元有 7 個:I、V、X、L、C、D、M,分別表示 1、5、10、50、100、500、1000。
在構成數字的時候,有下列規則:
1、相同的數字連寫,所表示的數等於這些數字相加得到的數,如:III = 3;
2、小的數字在大的數字的右邊,所表示的數等於這些數字相加得到的數, 如:VIII = 8;XII = 12;
3、小的數字,(限於Ⅰ、X和C)在大的數字的左邊,所表示的數等於大數減小數得到的數,如:IV = 4;IX = 9;
4、正常使用時,連寫的數字重複不得超過三次。
輸入格式
輸入一個羅馬數字字串,其對應的數字為 s(1≤s≤3999)。
輸出格式
輸出對應的整數 s。
樣例輸入
CXXIII
樣例輸出
123
暴力匹配
但測試了幾組資料結果都對,但提交錯誤(超出記憶體限制?超時?),有哪位遊客找出錯誤原因請提示一下。。。。
#include<stdio.h>
#include<string.h>
int main()
{
char* c[4][10]={
{"","I","II","III","IV","V","VI","VII","VIII","IX"},
{"" ,"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"},
{"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"},
{"","M","MM","MMM"}
};
char str[4000][10];
char *str1;
char *str2;
char *str3;
char *str4;
for(int i = 1;i<4000;i++)
{
str1 = c[3][i/1000 ];
str2 = c[2][i%1000/100];
str3 = c[1][i%100/10];
str4 = c[0][i%10];
strcpy(str[i],str1);
strcat(str[i],str2);
strcat(str[i],str3);
strcat(str[i],str4);
}
char str5[10];
scanf("%s",str5);
for(int i = 1;i<4000;i++)
{
if(!strcmp(str[i],str5))
printf("%d",i);
}
return 0;
}