=== 소감 === 완벽하다고 자부한다. (소스말구요 프로그램 출력..헤헤..^^) 왜냐하면.. 예외처리(?)를 완벽하게, 원시적으로 처리했기 때문에?!! 덕분에 소스가 길어졌다. 로마숫자는 숫자를 길게 쓰지 않으려는 노력의 흔적은 보이지만 딱 꼬집어서 한가지로 말할 알고리즘은 없는것 같다. === 소스 === {{{~cpp #include #include 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] [로마숫자바꾸기]