U E D R , A S I H C RSS

로마숫자바꾸기/허아영

소감

완벽하다고 자부한다. (소스말구요 프로그램 출력..헤헤..^^)
왜냐하면.. 예외처리(?)를 완벽하게, 원시적으로 처리했기 때문에?!!
덕분에 소스가 길어졌다.
로마숫자는 숫자를 길게 쓰지 않으려는 노력의 흔적은 보이지만 딱 꼬집어서 한가지로 말할 알고리즘은 없는것 같다.

소스

~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");
}

나한테 할 말


완벽하네..ㅎㅎ 사실 그렇게 길지도 않는데?ㅎ 한 1000자리쯤 가면 좀 길어질려나..ㅎㅎ 왠지 한 {}안의 내용이 비슷비슷해 보이기는 하지만.ㅎㅎ 뭐..어디가 중복인지는 나도 모르겠..ㅎㅎ 그러니 나름대로 괜찮은 소스라고.. ㅎㅎ 그럼 좋은하루..(추신: 네 소스는 항상 테스트가 잘됨.ㅎ) - 조현태
----
LittleAOI 로마숫자바꾸기
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.0875 sec