Перевод в десятичную систему - C (СИ)

Узнай цену своей работы

Формулировка задачи:

То, что я начинающий в проге объяснять не стоит, видно по умолчанию. Посмотрите, пожалуйста, код перевода из двоичную в десятичную. Дело в том, что если число состоит только из 1, прога работает, а вот если из 1 и 0, то ничего не работает.
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #define NAME 81
  6. int main (void)
  7. {
  8. int i, total=0, res=0, n_num=0;
  9. char num[NAME];
  10. gets(num);
  11. n_num=strlen(num)-1;
  12. for(i=n_num;i>=0;i--)
  13. {
  14. if(num[i]=='1')
  15. {
  16. res=pow(2,i);
  17. total+=res;
  18. }
  19. }
  20. printf("%d", total);
  21. return 0;
  22. }
просмотрел форум по данной теме, понял, что если заменить:
Листинг программы
  1. if(num[i]=='1')
  2. {
  3. res=pow(2,i);
  4. total+=res;
  5. }
на
Листинг программы
  1. if(num[i]=='1')
  2. total+=res;
  3. res*=2;
всё будет работать, но не понимаю почему так получается, хелп ми

Решение задачи: «Перевод в десятичную систему»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. #define LIM 100000
  4.  
  5. int main()
  6. {
  7.     int n, i, k, a[LIM];
  8.     scanf("%d", &n);
  9.    
  10.     k = 0;
  11.     while (n > 0) {
  12.         a[k] = n % 2;
  13.         n /= 2;
  14.         k++;
  15.     }
  16.    
  17.     if (k == 0)
  18.         putchar('0');
  19.     else
  20.         for (i = k - 1; i >= 0; i--)
  21.             printf("%d", a[i]);
  22.    
  23.     putchar('\n');
  24.     return 0;
  25. }

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

В этом коде:

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы