반응형
출처: http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=557&sca=50
Approach
보수의 정의
① N자리 A진법 수 K가 있을 때 A의 보수는 :
▶ AN - K
▶ A-1의 보수를 구하고 1을 더한다.
② N자리 A진법 수 K가 있을 때 A-1의 보수는 :
▶ AN - 1 - K
ex) 110111012의 1의 보수 = 001000102
ex) 8(N)자리 2(A)진법 수 0000 0101(K)의 2(A)의 보수 구하기 (십진법으로는 5)
Horner's Method
2진수 1101을 자리수별 가중치를 주어 10진수로 나타내면 아래와 같다.
1101 = 0 * 24 + 1 * 23 + 1 * 22 + 0 * 21 + 1 이므로
= (((0*2 + 1) * 2 + 1) * 2 + 0) * 2 + 1 = 1310
방법 1
- 첫 비트는 부호비트이면서 음수인 경우 가중치를 갖는다.
- 첫 비트를 제외하고 [Horner's Method]로 10진수를 구한다.
- 첫 비트가 1이면 결과에 -128을 더한다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
// freopen("input.txt", "r", stdin);
int d = 0, i, a;
for (i = 0; i < 8; ++i) {
scanf("%1d", &a);
d = d * 2 + a;
}
// printf("%d\n", d - (d > 127)*256);
if (d > 127) d -= 256;
printf("%d\n", d);
}
방법 2
※ 8비트 signed 정수를 char형 변수로도 처리가능
-128 ~ 127 까지 표현하는 특징 이용
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
// freopen("input.txt", "r", stdin);
int d = 0, i, a;
for (i = 0; i < 8; ++i) {
scanf("%1d", &a);
d = d * 2 + a;
}
printf("%d\n", (char)d);
}
반응형
'PS 문제 풀이 > Jungol' 카테고리의 다른 글
[Jungol] 정올 1040 자리올림 횟수 찾기 (0) | 2021.03.17 |
---|---|
[Jungol] 정올 1307 문자사각형1 (0) | 2021.03.17 |
[Jungol] 정올 1262 긴 자릿수 곱셈 (0) | 2021.03.16 |
[Jungol] 정올 1374 긴 자릿수 덧셈 뺄셈 (0) | 2021.03.16 |
[Jungol] 정올 1035 최대값 (0) | 2021.03.16 |
댓글