1. 程式人生 > >計蒜客 -- 羅馬數字轉換成整數

計蒜客 -- 羅馬數字轉換成整數

給定一個羅馬數字 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; }