2014-09-16 1 views
-2

나는 이것을하는 방법을 알고 있으며 과거에는 그런 프로그램을 만들었지 만, 로마 숫자의 특별한 경우 (예 : IV = 4)를 통합하지는 못했습니다. 기능적인 프로그램에 최소한의 방법으로 통합하는 것이 주요한 문제입니다. 이것을 할 수있는 좋은 방법이 있습니까?C++ : 십진법과 로마식 숫자 변환

+2

[읽는 방법] (http://en.wikipedia.org/wiki/Roman_numerals#Reading_Roman_numerals)을 알고 있다면 쉽게 만들 수 있습니다. 그것은 단지 division, modulo 및 in 루프는 특정 문자열을 다른 문자열로 연결하는 문자열입니다. –

+0

네,하지만 그 예가 무엇입니까? 나는 그들에게 읽어주는 법을 안다. 특별한 경우를 적용하는 것은 어렵다. 나는 그 과정을 지나치게 생각하고있을 뿐이지 만, 나는 무엇을해야할지 알고 싶어한다. @JoachimPileborg에 질문 할 수 있다면 구현 방법은 무엇입니까? – T145

+0

모든 하나 및 두 자리 숫자 및 그 값의 표를 사용하면 M (1000)에서 I (1)로 변환하여 첫 번째 값> = 변환하려는 값을 검색 할 수 있습니다. 해당 문자열을 결과에 연결하고 해당 값을 뺍니다. 반복. – molbdnilo

답변

1

매우 간단한 솔루션, 의사 코드에서이 같은 것을 볼 수 있었다 :

value = get_the_value_to_convert(); 
divider = 1000; // Start at 1000 (M) 

while (value > 0) 
{ 
    count = value/divider; 
    value = value % divider; 

    for (i = 0; i < count; ++i) 
     print(roman_numeral_from_number(divider)); 

    divider /= 10; 
} 

roman_numeral_from_numbe 함수는 숫자와 로마 숫자 사이에 일대일 매핑을 수행합니다.

예 : 5432을 입력하면 MMMMMCCCCXXXII이 인쇄됩니다.

더 나은 결과를 얻으려면 divider 변수를 25으로 두 번 씩 나누십시오.

더 나은 결과를 얻으려면 90"XC"과 같은 특정 숫자가 있는지 확인하십시오.

수정 한 경우에도 위의 알고리즘은 매우 큰 숫자를 처리 할 수 ​​없지만 다른 한편으로는 Wikipedia은 역사적으로 작은 숫자로만 사용되었다고 명시합니다.

+0

굉장히 감사합니다. "roman_numeral_from_number"메쏘드의 경우, 그것은 'value> = 1000'과 유사할까요? roman_year + = "M": ...'? – T145

+0

또한 루프에서 'i' 변수를 사용하지 않기 때문에 기술적으로 루프 문이나 카운트 변수가 필요하지 않습니다. – T145