Перевод в десятичную систему - 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;
}

Объяснение кода листинга программы

В этом коде:

  1. Объявляются переменные:
    • n - для хранения числа, вводимого пользователем;
    • i и k - для использования в качестве счётчиков;
    • a - массив для хранения остатков от деления числа на 2.
  2. С помощью функции scanf в переменную n считывается число, вводимое пользователем.
  3. Переменная k инициализируется нулём. Она используется как счётчик для хранения остатков от деления числа на 2 в массиве a.
  4. В цикле while происходит последовательное деление числа на 2 и запись остатка в соответствующий элемент массива a.
  5. Если после цикла while значение переменной k равно нулю, то выводится ноль.
  6. Если после цикла while значение переменной k не равно нулю, то в обратном порядке выводятся элементы массива a, соответствующие от наибольшего к наименьшему.
  7. Выводится символ новой строки.
  8. Программа возвращает ноль, что означает успешный конец работы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы