Перевод беззнаковых чисел из двоичной с-мы в десятичную - C (СИ)
Формулировка задачи:
Доброго времени суток. Написал такое чудо для перевода из двоичной в десятичную. Переводит првильно только
при вводе только едениц (111 - 7 и т.д). Не могу понять как исправить.
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char bin[64];
char buff[2];
int i;
int n;
int s = 0;
int str_len;
long unsigned int res = 0;
scanf("%s", bin);
str_len = strlen(bin);
for(i = 0; bin[i] != '\0'; i++)
{
buff[0] = bin[i];
buff[1] = '\0';
n = atoi(buff);
if(n == 0)
{
s+=1;
}
else if(n == 1)
{
res += n * pow(2,i+s);
s = 0;
}
}
printf("%lu", res);
return 0;
}Решение задачи: «Перевод беззнаковых чисел из двоичной с-мы в десятичную»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char bin[64];
int i;
long unsigned int res = 0;
memset(bin,0,sizeof(bin));
if(scanf("%s", bin) == 1)
{
for(i = 0; i < strlen(bin); i++)
{
res += (bin[i]=='1') ? 1 << (strlen(bin) - i -1):0;
}
printf("%lu", res);
}
return 0;
}