More actions
소감
완벽하다고 자부한다. (소스말구요 프로그램 출력..헤헤..^^) 왜냐하면.. 예외처리(?)를 완벽하게, 원시적으로 처리했기 때문에?!! 덕분에 소스가 길어졌다. 로마숫자는 숫자를 길게 쓰지 않으려는 노력의 흔적은 보이지만 딱 꼬집어서 한가지로 말할 알고리즘은 없는것 같다.
소스
#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");
}
나한테 할 말
완벽하네..ㅎㅎ 사실 그렇게 길지도 않는데?ㅎ 한 1000자리쯤 가면 좀 길어질려나..ㅎㅎ 왠지 한 {}안의 내용이 비슷비슷해 보이기는 하지만.ㅎㅎ 뭐..어디가 중복인지는 나도 모르겠..ㅎㅎ 그러니 나름대로 괜찮은 소스라고.. ㅎㅎ 그럼 좋은하루..(추신: 네 소스는 항상 테스트가 잘됨.ㅎ) - 조현태