ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JUNGOL 실력키우기 3106 : 진법 변환
    보관함 2018. 12. 9. 18:46


    A진법 수 N을 입력 받아 B진법 수로 출력하는 프로그램을 작성하시오.

    N에 사용되는 값은 0 ~ 9, A ~ Z이다.

    (2 <= A, B <= 36) ( 0<= N<= 263-1 )



     

    입력은 100개 이하의 테스트 케이스가 행으로 구분하여 주어진다.
    테스트 케이스의 끝에는 0이 주어진다.
    각 테스트 케이스에는 세 수 A, N, B가 공백으로 구분되어 주어진다.




    각 테스트 케이스에 대하여 A진법수 N을 B진법 수로 변환한 결과를 행으로 구분하여 출력한다.



    2 10110 10
    10 2543 16
    16 ABC 8
    0
    22
    9EF
    5274




    먼저 10진수로 값을 변환한 이후 10진수에서 다른 진수로 변환하는 나누기방법을 사용하면 될 것 같습니다.



    설명하자면 2진수인 1010의 10진수로의 변환은 오른쪽부터 가중치 1로 시작해서 원본 진수인 2를 가중치에 곱하면서 원본 값과 더하면 구할 수 있습니다.

    위 예제는 1 * 8 + 0 * 4 + 1 * 2 + 0 * 1 = 10이 됩니다.


    10진수에서 2진수로의 변환은 10진수 값을 변경하고 싶은 진수로 나누고 목을 밑에 적고 나머지를 오른쪽에 둡니다.

    더 이상 나눠지지 않을 때 까지 나눈 뒤 해당 값에서부터 거꾸로 올라가면서 작성하면 2진수로의 변환이 됩니다.

    위 예제에서 더 이상 나눠지지 않는 몫인 1부터 오른쪽 위로 1010이 됩니다.



    그런데 생각했던 대로 한번에 결과가 나오지 않았습니다.



    일단 위 결과에서는 일반적인 계산처리는 문제가 없었습니다. 그런데 결과가 0인 경우 애초에 나눠지지 않기 때문에 값이 들어가지 않아서 결과가 달랐던 것 같습니다. 그러므로 모든 계산이 끝난 이후 result가 비어있다면 result에 0을 넣고 리턴하도록 하면 될 것 같습니다.



    흠... 해당 부분만 문제라고 생각했는데 다른 문제가 있는 것 같습니다.



    수정이후 0이되어서는 안되는 부분에서 0이되는 경우가 발생한 것을 확인할 수 있었습니다. 해당 값을 디버깅해서 문제를 확인해 보도록 하죠.

    디버깅을 돌리다보니 값의 범위를 다시 확인하게 되는데요, 2^63-1 까지가 범위네요. 즉, long long형을 사용해야 하는 문제였습니다.





    JUNGOL) 문제은행) 실력키우기) 진법 변환

    댓글

Designed by Tistory.