다음은 C 언어에서 로마 숫자를 10진수로 변환하는 알고리즘입니다 -
알고리즘
1단계 - 시작
2단계 - 런타임에 로마 숫자 읽기
3단계 - 길이:=strlen(roman)
4단계 - i =0에서 length-1까지
4.1단계 - switch(roman[i])
4.1.1단계 - 케이스 'm':
4.1.2단계 - 케이스 'M':
4.1.2.1 단계 - d[i]:=1000
4.1.3단계 - 케이스 'd':
4.1.4단계 - 케이스 'D':
4.1.4.1 단계 - d[i]:=500
4.1.5단계 - 케이스 'c':
4.1.6단계 - 케이스 'C':
4.1.6.1 단계 - d[i]:=100
4.1.7단계 - 케이스 'l':
4.1.8단계 - 케이스 'L':
4.1.8.1 단계 - d[i]:=50
4.1.9단계 - 케이스 'x':
4.1.10단계 - 케이스 'X':
4.1.10.1 단계 - d[i]:=10
4.1.11단계 - 'v'의 경우:
4.1.12단계 - 'V'의 경우:
4.1.12.1 단계 - d[i]:=5
4.1.13단계 - 케이스 'i':
4.1.14단계 - '나'의 경우:
4.1.14.1 단계 - d[i]:=1
5단계 - i =0에서 길이 1까지
단계 5.1 - if (i==length-1) 또는 (d[i]>=d[i+1]) then
5.1.1 단계 − 데시 +=d[i]
5.2단계 - 그렇지 않은 경우
5.2.1 단계 - deci -=d[i]
6단계 - 로마 숫자에 해당하는 10진수 인쇄
7단계 - 중지
프로그램
다음은 로마 숫자를 십진수로 변환하는 C 프로그램입니다. -
#include <stdio.h> #include <conio.h> main(){ char roman[30]; int deci=0; int length,i,d[30]; printf("The Roman equivalent to decimal\n"); printf("Decimal:.........Roman\n"); printf("%5d............%3c\n",1,'I'); printf("%5d............%3c\n",5,'V'); printf("%5d............%3c\n",10,'X'); printf("%5d............%3c\n",50,'L'); printf("%5d............%3c\n",100,'C'); printf("%5d............%3c\n",500,'D'); printf("%5d............%3c\n",1000,'M'); printf("Enter a Roman numeral:"); scanf("%s",roman); length=strlen(roman); for(i=0;i<length;i++){ switch(roman[i]){ case 'm': case 'M': d[i]=1000; break; case 'd': case 'D': d[i]= 500; break; case 'c': case 'C': d[i]= 100; break; case 'l': case 'L': d[i]= 50; break; case 'x': case 'X': d[i]= 10; break;; case 'v': case 'V': d[i]= 5; break; case 'i': case 'I': d[i]= 1; } } for(i=0;i<length;i++){ if(i==length-1 || d[i]>=d[i+1]) deci += d[i]; else deci -= d[i]; } printf("The Decimal equivalent of Roman numeral %s is %d", roman, deci); }
출력
위의 프로그램을 실행하면 다음과 같은 결과가 나온다 -
The Roman equivalent to decimal Decimal:.........Roman 1............ I 5............ V 10............ X 50............ L 100............ C 500............ D 1000............ M Enter a Roman numeral: M The Decimal equivalent of Roman Numeral M is 1000