10진수를 2진수로 바꾸는 방법은 여러가지가 있지만 특이한 방법으로 변환을 해보고 싶어져서 작성하게 되었습니다.
#include <stdio.h>
int main() {
int count, i = 1;
double t;
scanf("%d", &count);
for (t=0;count>0;count/=2,i*=10,t/=10.0) t+=count%2;
printf("%d", (int) (t*i));
return 0;
}
count는 2진수로 변환할 10진수를 저장하고 i는 소수로 저장된 총합을 정수로 변환해줄 값을 저장합니다.
값을 넣은뒤에 10을 나누어 값을 소수점에 저장한뒤에 마지막에 자리수만큼 10의 거듭제곱을 곱하여서 결과를 구하게 구현하였습니다.
(예시값 : 15)
순서 | t의 값 | i의 값 | t * i |
---|---|---|---|
1 | 0.000000 | 1 | 0 |
2 | 0.100000 | 10 | 1 |
3 | 0.110000 | 100 | 11 |
4 | 0.111000 | 1000 | 111 |
5 | 0.111100 | 10000 | 1111 |
10의 x승
을 저장하는 i
가 오버플로우 하면서 값이 이상하게 나오는 현상이 존재합니다.예시)
입력:155
=> 10011011
입력: 1555
=> 133732862
t값
을 float
으로 정의하면 일부 소수점이 x.9999...와 같이 저장되어 정수로 변환하였을때 값이 다르게 나올때가 있다.double을 float으로 바꾼 예시)
입력:13
(int로 변환하기 전) => 1100.9998781100
=> 1100