Программа на си. У меня не получается правильно перевести с двоичной системы в "восмиричную"

Знаю что ужасно, из-за этого и прошу помощи. 2 дня уже потратил. :(

#include <stdio.h>
int main()
{
    long int n, i, delitel, posl = 0;
    long int counter = 1, timeless;
    long int number, decimal = 0;
    scanf_s("%d %d %d", &delitel, &n, &number);
    if (delitel == 4) {
        while (number)
        {
            timeless = number % 10 * counter;
            decimal = decimal + timeless;
            number = number / 10;
            counter *= 2;
        }
        while (decimal) {
            posl = 10 * posl + decimal % 4;
            decimal = decimal / 4;
        }
        while (posl) {
            printf("%d", posl % 10);
            posl = posl / 10;
        }
    }
    else if (delitel == 8) {
        while (number)
        {
            timeless = number % 10 * counter;
            decimal = decimal + timeless;
            number = number / 10;
            counter *= 2;
        }
        while (decimal) {
            posl = 10 * posl + decimal % 8;
            decimal = decimal / 8;
        }
        while (posl) {
            printf("%d", posl % 10);
            posl = posl / 10;
        }
    }
    return(0);
}

задание


Ответы (1 шт):

Автор решения: Harry

Блин.... Просто берете из строки по 2 (для системы 4) или 3 (для 8) цифры и переводите из в нужную цифру. Всё! Как вы вообще собирались загонять 1000 цифр в int?...

Всегда, всегда, ВСЕГДА давайте полное условие, а не начинайте выяснять, какой рукой держать микроскоп при забивании гвоздей...

int main()
{
    int d, L;
    scanf("%d %d\n",&d,&L);
    char s[1005];
    scanf("%s",s);
    printf("[%s]\n",s);
    d = (d==4)?2:3;
    char * c = s;
    for(int i = 0; i < L/d; ++i)
    {
        int x = 0;
        for(int j = 0; j < d; ++j)
            x = x*2+ *c++ -'0';
        printf("%d",x);
    }
}
→ Ссылка