+ human code의 binary to decimal
+ 입력되는 binary 크기를 알 수 없어서 반복문을 자주사용 함 (줄일 수 있을까?!)
+ binary_str를 굳이 malloc으로 할 필요성이 없을 듯 그럼 반복문이 하나줌
+ real binary to decimal
#include <stdio.h>
int binary2decimal(int n)
{
int nn = n;
int count;
int *binary_str;
int i;
int remain;
int ret;
count = 0;
do {
count++;
} while ((nn = (nn / 10)) > 0);
binary_str = (int *)malloc(sizeof(int)*count);
nn = n;
for (i = 0; i < count; i++) {
remain = nn % 10;
binary_str[i] = remain;
nn /= 10;
}
ret = 0;
for (i = count - 1; i >= 0; i--) {
ret <<= 1;
if (binary_str[i]) {
ret += 1;
}
else {
ret += 0;
}
}
return ret;
}
void main()
{
printf("0b0 : %d\n", binary2decimal(0));
printf("0b1 : %d\n", binary2decimal(1));
printf("0b100 : %d\n", binary2decimal(100));
printf("0b111 : %d\n", binary2decimal(111));
printf("0b11101 : %d\n", binary2decimal(11101));
printf("%d\n", 1);
printf("%d\n", 1 << 1);
printf("%d\n", 1 << 2);
}
--- 수정 ---
#include <stdio.h>
int binary2decimal(int n)
{
int nn = n;
int count;
int *binary_str;
int i;
//int remain;
int ret;
count = 0;
do {
count++;
} while ((nn = (nn / 10)) > 0);
binary_str = (int *)malloc(sizeof(int)*count);
nn = n;
for (i = 0; i < count; i++) {
//remain = nn % 10;
//binary_str[i] = remain;
if (nn & 1) {
binary_str[i] = 1;
}
// delete %
nn /= 10;
}
ret = 0;
for (i = count - 1; i >= 0; i--) {
ret <<= 1;
if (binary_str[i]) {
ret += 1;
}
else {
ret += 0;
}
}
free(binary_str);
binary_str = NULL;
return ret;
}
--- 수정2 ---
#include <stdio.h>
int binary2decimal(int n)
{
int nn = n;
int count;
char binary_str[256];
int ret;
int i;
count = 0;
do {
if (nn & 1) {
binary_str[count] = 1;
}
else {
binary_str[count] = 0;
}
count++;
} while ((nn = (nn / 10)) > 0);
ret = 0;
for (i = count - 1; i >= 0; i--) {
ret <<= 1;
if (binary_str[i]) {
ret += 1;
}
else {
ret += 0;
}
}
return ret;
}
--- 추가 ---
#include <stdio.h>
int binary2decimal(int n)
{
int nn = n;
int count;
char binary_str[256];
int ret;
int i;
count = 0;
do {
if (nn & 1) {
binary_str[count] = 1;
}
else {
binary_str[count] = 0;
}
count++;
} while ((nn = (nn / 10)) > 0);
ret = 0;
for (i = count - 1; i >= 0; i--) {
ret <<= 1;
if (binary_str[i]) {
ret += 1;
}
else {
//ret += 0;
}
}
return ret;
}
int binarytodecimal(int _n)
{
int n = _n;
int ret = 0;
int count = 0;
do {
if (n & 1) {
ret += (1 << count);
}
else {
//ret += (0 << count);
}
count++;
} while ((n /= 2) != 0);
return ret;
}
void main()
{
printf("0b0 : %d\n", binary2decimal(0));
printf("0b1 : %d\n", binary2decimal(1));
printf("0b100 : %d\n", binary2decimal(100));
printf("0b111 : %d\n", binary2decimal(111));
printf("0b11101 : %d\n", binary2decimal(11101));
printf("0b0 : %d\n", binarytodecimal(0b0));
printf("0b1 : %d\n", binarytodecimal(0b1));
printf("0b100 : %d\n", binarytodecimal(0b100));
printf("0b111 : %d\n", binarytodecimal(0b111));
printf("0b11101 : %d\n", binarytodecimal(0b11101));
}
'Programming > C,C++' 카테고리의 다른 글
십진수 수에서 '0' 개수 세기 (0) | 2017.04.20 |
---|---|
List (C, Double Linked) / ...ing (0) | 2017.04.20 |
List (C, Single Linked) / ..ing (0) | 2017.04.18 |
bubble sort 3 / int (0) | 2017.04.17 |
strstr 구현하기 (0) | 2017.04.17 |