Программа на си. У меня не получается правильно перевести с двоичной системы в "восмиричную"
Знаю что ужасно, из-за этого и прошу помощи. 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);
}
}
