Перевод в десятичную систему - C (СИ)
Формулировка задачи:
То, что я начинающий в проге объяснять не стоит, видно по умолчанию. Посмотрите, пожалуйста, код перевода из двоичную в десятичную. Дело в том, что если число состоит только из 1, прога работает, а вот если из 1 и 0, то ничего не работает.
на
всё будет работать, но не понимаю почему так получается, хелп ми
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define NAME 81
int main (void)
{
int i, total=0, res=0, n_num=0;
char num[NAME];
gets(num);
n_num=strlen(num)-1;
for(i=n_num;i>=0;i--)
{
if(num[i]=='1')
{
res=pow(2,i);
total+=res;
}
}
printf("%d", total);
return 0;
}
просмотрел форум по данной теме, понял, что если заменить:
if(num[i]=='1')
{
res=pow(2,i);
total+=res;
}if(num[i]=='1') total+=res; res*=2;
Решение задачи: «Перевод в десятичную систему»
textual
Листинг программы
#include <stdio.h>
#define LIM 100000
int main()
{
int n, i, k, a[LIM];
scanf("%d", &n);
k = 0;
while (n > 0) {
a[k] = n % 2;
n /= 2;
k++;
}
if (k == 0)
putchar('0');
else
for (i = k - 1; i >= 0; i--)
printf("%d", a[i]);
putchar('\n');
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Объявляются переменные:
n- для хранения числа, вводимого пользователем;iиk- для использования в качестве счётчиков;a- массив для хранения остатков от деления числа на 2.
- С помощью функции
scanfв переменнуюnсчитывается число, вводимое пользователем. - Переменная
kинициализируется нулём. Она используется как счётчик для хранения остатков от деления числа на 2 в массивеa. - В цикле
whileпроисходит последовательное деление числа на 2 и запись остатка в соответствующий элемент массиваa. - Если после цикла
whileзначение переменнойkравно нулю, то выводится ноль. - Если после цикла
whileзначение переменнойkне равно нулю, то в обратном порядке выводятся элементы массиваa, соответствующие от наибольшего к наименьшему. - Выводится символ новой строки.
- Программа возвращает ноль, что означает успешный конец работы.