소감 ¶
완벽하다고 자부한다. (소스말구요 프로그램 출력..헤헤..^^)
왜냐하면.. 예외처리(?)를 완벽하게, 원시적으로 처리했기 때문에?!!
덕분에 소스가 길어졌다.
로마숫자는 숫자를 길게 쓰지 않으려는 노력의 흔적은 보이지만 딱 꼬집어서 한가지로 말할 알고리즘은 없는것 같다.
왜냐하면.. 예외처리(?)를 완벽하게, 원시적으로 처리했기 때문에?!!
덕분에 소스가 길어졌다.
로마숫자는 숫자를 길게 쓰지 않으려는 노력의 흔적은 보이지만 딱 꼬집어서 한가지로 말할 알고리즘은 없는것 같다.
소스 ¶
~cpp
#include <stdio.h>
#include <string.h>
void input(int *number);
void operation(int number, char roma_data[3][4]);
void output(int number, char resultdata[20][4]);
void main()
{
int number = 0;
char roma_data[3][4] = {"Ⅹ", "Ⅰ", "Ⅴ"};
while(1)
{
input(&number);
if(number == 99)
break;
if(number > 99 || number <= 0)
{
printf("다시 입력해 주세요...n");
}else
{
operation(number, roma_data);
}
}
}
void input(int *number)
{
printf("숫자를 입력(종료:99) :");
scanf("%d", number);
}
void operation(int number, char roma_data[3][4])
{
int numberdata[5] = {0,};
char resultdata[20][4] = {0,};
int i = 0;
numberdata[0] = number / 10;
numberdata[1] = number % 10;
while(numberdata[0] > 0)
{
strcpy(resultdata[i], roma_data[0]);
++i;
--numberdata[0];
}
if(numberdata[1] == 4 || numberdata[1] == 9)
{
strcpy(resultdata[i], roma_data[1]);
++i;
if(numberdata[1] == 4)
strcpy(resultdata[i], roma_data[2]);
else
strcpy(resultdata[i], roma_data[0]);
++i;
numberdata[1] = 0;
}else if(numberdata[1] >= 5)
{
strcpy(resultdata[i], roma_data[2]);
numberdata[1] -= 5;
++i;
}
while(numberdata[1] >= 1)
{
strcpy(resultdata[i], roma_data[1]);
++i;
--numberdata[1];
}
output(number, resultdata);
}
void output(int number, char resultdata[20][4])
{
int i = 0;
printf("%d : ", number);
while(i < 18)
{
printf("%s", resultdata[i]);
++i;
}
printf("n");
}










