Задача преобразовать число с двоичной системы счисления в десятичную
Пыталась написать программу, которая преобразует число с двоичной системы в десятичную и все никак не выходит. Знаю, что проблема вроде в несовместимости типов параметров в функции strlen, не знаю как исправить, все время ошибки.
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <cstdlib>
using namespace std;
int main() {
setlocale(LC_ALL, "RUSSIAN");
char* num;
int sum = 0;
cout << "Введите двоичное число" << endl;
cout << num << endl;
const char* count = strlen(num);
for (int a = 0; a <= count; a++) {
sum += (pow(2, a) * num[a]);
return 0;
}
cout << sum;
}
Ответы (2 шт):
Автор решения: AR Hovsepyan
→ Ссылка
У вас ошибка не одна, и одна из них в том, что вы пытаетесь выводить не инициализированный указатель. Не стану долго объяснять. Можете делать так:
char num[32];
std::cout << "Введите двоичное число" << endl;
std::cin >> num;
unsigned result = 0;
size_t size = strlen(num);
for (size_t i = 0; i < size; ++i)
{
if (num[i] != '1' && num[i] != '0') {
std::cerr << "invalid argument";
return 0;
}
result |= (num[i] - '0') << (size - i - 1);
}
std::cout << result;
Автор решения: Mikhailo
→ Ссылка
Мой вариант, без всяких возведений в степень (правда, и без проверки правильности ввода):
int main() {
cout << "Введите двоичное число" << endl;
string num;
cin >> num;
int res = 0;
for (char c : num) {
res = res * 2 + c - '0';
}
cout << res;
}
string num; можно заменить на массив типа char num[33];, только это небезопасно.