[Luogu의 p1017] 헥스 변환

얼굴 질문

제목 설명

지표로서 위치에 자리의 곱셈 각 디지트에 : 우리는 진수 표현이 방법을 사용할 수 \ (10 \) 전력 및 염기 번호의 형태로있다. 예를 들어, (\ 123 \) 로 표현 될 수있다 (\ 1 \ 시간 10 ^ 2 + 2 \ 시간 10 ^ 3 + 1 \ 시간 10 ^ 0 \) 와 같은 형태.

이진수가 지표로서 위치까지의 숫자 각각 곱하여 마찬가지로, 이진수, 그것은 표현 될 수있는 \ (2 \) 염기 형태 및 전원.

일반적으로, 임의의 양의 정수 \ (R & LT \) 또는 음의 정수 (\ - R \) 기수 번호 시스템으로서 선택 될 수있다. 당신이 경우 \ (R \) 또는 \ (- R \) 기본으로, 우리는 디지털 사용할 필요가 \ (0, 1, ..., R-1 \) .

하면, 예를 들어, \ (R = 7 \)는 , 디지털의 사용은 필수 (0,1,2,3,4,5,6 \) \ , 이는 그 인 \ (R & LT \) 또는 R은 \ - (\ ) 할 수 없다. 절대 값이 기재의 수를 초과하면 \ (10 \)를 , 다음 디지털보다 큰 나타내는데이 일반적으로 사용되는 문자를 나타 내기 위해 (\ 9) \ 디지털. 예를 들어, (16 \) \ 어림의 사용 \ (A는 \) 나타낸다 (\ 10) \ 와, (B \) \ 나타낸다 \ (11 \) 와, \ (C \) 대표 \ (12 \ ) , 그리고에 이렇게.

$와 네가티브 번호는 -R 및 LT 진수 $ 예컨대 기재,뿐만 \ (--15 \) (10 진수)에 대응하는 (\ 110001 \) (\ (- 2 \) 진)과 같이 표현 될 수있다 \ (2 \) 멱급수 합계 :
.. \ [= 110,001, 중국 1 \ 시간 (-2) + 1.5 ^ \ 시간 (-2) + 0.4 ^ \ 시간 (-2) + 0.3 ^ \ 시간 ( -2) ^ 2 + 0 \ 시간 (-2) ^ 1 +1 \ 시간 (-2) ^ 0 \]

음의 번호로이 작업을 수행하려면 진수로 진수와 진수 기수의 음수,이 진수를 읽는 프로그램을 디자인합니다.

입력 및 출력 형식

입력 형식

각 행은 두 개의 입력은 입력 데이터를 갖는다.
첫 번째는 십진수이다 \ (N- \) . 두 번째 숫자는 기저 밴드 \ (- R & LT \) .

출력 형식

이 출력과 음의 소수 기부,이 경우보다 기본 \ (10 \) 에, 기준 \ (16 \) 헥사 방법.

샘플 입출력

입력 샘플 # 1

30000 -2

샘플 출력 # 1

30000=11011010101110000(base-2)

입력 샘플 # 2

-20000 -2

출력 샘플 # 2

-20000=1111011000100000(base-2)

입력 샘플 # 3

28800 -16

출력 샘플 # 3

28800=19180(base-16)

입력 샘플 # 4

-25000 -16

출력 샘플 # 4

-25000=7FB8(base-16)

설명

[범위]에 대한 데이터 (\ 100 \ % \) 데이터 \ (- 20 \ 인 R & 르 \ 르 -2 \ LT) \ (| N- | \ 37,336 르 \) .
그룹 첫 번째 질문을 향상 NOIp2000

분석

우리 모두 바이너리 변환, 짧은 부문 믿습니다. 바이두는 추천하지 않습니다.
이 질문은 우리가 단순히 현재 위치를 필요로하는 것도 매우 분명하다마법계수 한 후 반복적으로 다음 위치에, 때까지는 다음 일이 없다. 아이디어는 매우 간단하지만, 나는 세부 사항을 발견했을 때 코딩 실제에 부정적인 번호가 약간 다를 수 있습니다 모듈로.
예를 들어,에 cpp1, -7 % -2 = 1,, -7 / -2 = 3사실,이 권리이지만, 나가 때문에 우리는 시간 턴 진수에 그것을 할 수 없습니다마법계수는, 음 ......

그건에게 너희는 우리가해야합니까?   

우리는 설정 \ (A / B = C \ BMOD D를 \) , 매우 현명 방법은 : \ (C \ 왼 화살 1 + C \.) \ (D \ 왼 화살 D - B \) .
당신은 어떻게 증명합니까? 나머지 식 분할 통해 초등학교 \ (A = B \ 시간 C + D \) 아 세트!
\ [A = B \ 시간 (
C + 1) + D - B B A = \\ \ 시간 B + C + D - B B A = \\ \ 시간 C + D \] 알 수있는 전체 수식 나머지 공식 분할 벗어나지 않고.
사실, 이것은 1에 의한 방법이다.
내가 부정적인 밴드를 알게 등등이 질문의 접촉은, 하, 하, 정말 배운다.

코드

#include <iostream>
#include <cstdio>

int n,r;

void change(int k) {
    if(!k) return ;
    int mod = k % r;
    if(mod < 0) {
        k += r;
        mod -= r;
    }
    if(mod >= 10) mod += 'A' - 10;
    else mod += '0';
    change(k/r);
    printf("%c",mod);
    return ;
}

int main() {
    scanf("%d%d",&n,&r);
    printf("%d=",n);
    change(n);
    printf("(base%d)\n",r);
    return 0;
}

기록 리뷰

WA 0: R31067887 (주이 더 다음 시간은 확실히 너무 비극에주의를 지불하지 있기 때문에 출력 형식
AC 100!!!) : R31067892

추천

출처www.cnblogs.com/crab-in-the-northeast/p/luogu-p1017.html