문제

https://www.acmicpc.net/problem/2089
2089번: -2진수
-2진법은 부호 없는 2진수로 표현이 된다. 2진법에서는 20, 21, 22, 23이 표현 되지만 -2진법에서는 (-2)0 = 1, (-2)1 = -2, (-2)2 = 4, (-2)3 = -8을 표현한다. 10진수로 1부터 표현하자면 1, 110, 111, 100, 101, 11010, 110
www.acmicpc.net
코드
#include <iostream>
#include <string>
using namespace std;
int main(){
int n;
cin >> n;
if(n==0){
cout << "0";
return 0;
}
string result="";
while(n!=0){
if(n%-2==0){
result="0"+result;
n/=-2;
}else{
result="1"+result;
n=(n-1)/-2;
}
}
cout << result;
return 0;
}
정리
음수와 양수의 사이의 몫을 구할 때 프로그래밍 언어마다 나오는 값이 다르다는 것을 알게 되었다.
예를 들어 C,C++,Java와 같은 프로그래밍 언어에서는 10/-3=-3이 나오고 Python, Ruby와 같은 프로그래밍 언어에서는 10/-3=-4가 나온다. 즉 C,C++,Java에서는 몫을 구할 때 버림 방식을 사용하고 Python, Ruby에서는 몫을 구할 때 내림 방식을 사용한다.
-2진수를 구하기 위해서는 내림방식을 취해주어야 올바른 값을 계산할 수 있다. 내가 사용하는 언어는 C++이기 때문에 나누어떨어지지 않을 경우 n-1로 코드상에서 내림처리를 해주어야 한다. 즉, n=(n-1)/-2로 표현할 수 있다.
참조
'Beakjoon > math' 카테고리의 다른 글
| [백준] 1850번 최대공약수 (C++) - Euclidean algorithm (0) | 2022.09.07 |
|---|---|
| [백준] 4948번 베르트랑 공준 (C++) - Prime Number (0) | 2022.06.14 |
| [백준] 1735번 분수 합 (C++) - Euclidean algorithm (0) | 2022.06.10 |
| [백준] 6588번 골드바흐의 추측 (C++) (0) | 2022.04.01 |
| [백준] 1929번 소수 구하기 (C++) (0) | 2022.03.26 |