1. 程式人生 > >Love my code Just love my child

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;

}