binary2decimal

Programming/C,C++ 2017. 4. 19. 14:18


+ 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
Posted by 루나s
,