Love my code Just love my child
給定一個羅馬數字s,(I<=s<=MMMCMXCIX)(即1到3999),將羅馬數字轉換成整數。
如羅馬數字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、相同的數字連寫,所表示的數等於這些數字相加得到的數,如:Ⅲ= 3;
2、小的數字在大的數字的右邊,所表示的數等於這些數字相加得到的數, 如:Ⅷ= 8;Ⅻ= 12;
3、小的數字,(限於Ⅰ、X 和C)在大的數字的左邊,所表示的數等於大數減小數得到的數,如:Ⅳ=4;Ⅸ=9;
4、正常使用時,連寫的數字重複不得超過三次。
樣例輸入:
CXXIII
樣例輸出:
123
與上一題配套,如果你瞭解了規則的話,很容易可以看出來,只需要比較前後元素的大小,如果前面比後面大,這兩個羅馬字母代表的數字就相加;如果前面比後面小,就後面的減去前面的;如果相等也相加。再把每一對都相加,最後結果就是轉換後的整數了,程式碼如下:
#include<stdio.h>
#include<string.h>
int Equals(char a, char b);
int main(void) {
chara[16];
int b[15];
int sum =0, i = 0;
gets(a);
while (i<= strlen(a)) {
switch(a[i]) {
case'I' : b[i] = 1; break;
case'V' : b[i] = 5; break;
case'X' : b[i] = 10; break;
case'L' : b[i] = 50; break;
case'C' : b[i] = 100; break;
case'D' : b[i] = 500; break;
case'M' : b[i] = 1000; break;
}
i++;
}
i = 0;
while (i< strlen(a)) {
if(i+2 > strlen(a)) {
sum+= b[i];
break;
}
if(Equals(a[i], a[i+1]) == 0) {
sum+= b[i] + b[i+1];
i+= 2;
}
elseif (Equals(a[i], a[i+1]) == 1) {
sum+= b[i] + b[i+1];
i+= 2;
}
else{
sum+= b[i+1] - b[i];
i+= 2;
}
}
printf("%d",sum);
return 0;
}
int Equals(char a, char b) {
char c[8]= "IVXLCDM";
int i, j;
for (i =0; i < 7; i++)
if(a == c[i])
break;
for (j =0; j < 7; j++)
if(b == c[j])
break;
if (i <j)
return-1;
else if (i> j)
return1;
else
return0;
}