Форум программистов, компьютерный форум CyberForum.ru

Переводи из 2ной в 10ную - C++

Восстановить пароль Регистрация
 
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
26.09.2012, 13:48     Переводи из 2ной в 10ную #1
Есть массив уже заполненный int mas2[j] нулями и единицами

Например так 0011101

Хочу его возвести(число) в 10ную степень

Делаю так

Начинаю с последнего элемента к первому, так как число попадает в массив наоборот,то есть не 0011101 как нужно,а 1011100

Далее хочу суммировать произведение элемента 0 или 1 на 2 в степени смотря от прохода по циклу(qas)

qa это размерность массива,количество эллементов в нем

C++
1
2
3
4
5
6
7
8
int qas=0;//степень возведения числа 2
     int sum=0;//сумма чисел 
     for(j=qa-1;j>=0;j--)
     {  
                 sum+=mas2[j]*pow((double)2,qas);//тут пытаюсь сложить сумму
                 qas++;
     }
         fprintf(save,"%d ",sum);//Не обращать внимание что сишная,смысл вопроса не в этом
Формулу сам придумал мож она не верна

Не верно считает вообще,как поправить?

Добавлено через 4 минуты
Пример для чисел

0 0 1 1 1 1 0 выдает 60 это неверно должно быть 30

0 0 1 1 1 0 1 выдает 92 это не верно должно быть 29

0 0 1 1 1 0 0 выдает 28 это верно

0 0 1 1 0 0 1 выдает 76 это не верно должно быть 25

Добавлено через 14 минут
ООО чуток не дотерпел,сам разобрался,надо двигаться было в другом направлении не

C++
1
for(j=qa-1;j>=0;j--)
а вот так

C++
1
for(j=0;j<qa;j++)
Хотя я пока в недоумении почему именно так
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.09.2012, 14:40     Переводи из 2ной в 10ную #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
 
long To10(char *s)
{
   long a = 0;
   for(; *s; s++)
      a = (a << 1) + (*s - '0');
   return a;
}
 
int main()
{
   std::cout << To10("11001") << std::endl;
   std::cout << To10("11") << std::endl;
   std::cout << To10("1011") << std::endl;
   return 0;
}
Пaтрик
 Аватар для Пaтрик
394 / 387 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
26.09.2012, 14:53     Переводи из 2ной в 10ную #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <algorithm>
#include <string>
#include <functional>
 
int main()
{
   int arr[] = { 0, 0, 1, 1, 1, 0, 1 };
   std::string str;
   std::transform(std::begin(arr), std::end(arr), std::back_inserter(str), std::bind2nd(std::plus<int>(), '0'));
   std::cout << std::stoi(str, 0, 2);
   return 0;
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.09.2012, 14:57     Переводи из 2ной в 10ную #4
C++
1
2
3
4
5
6
7
8
9
10
11
long To10(char *beg, char *s, int deg2)
{
   return s >= beg ? ((*s - '0') << deg2) + To10(beg, s - 1, deg2 + 1) : 0;
}
 
int main()
{
   char *s = "11001";
   std::cout << To10_(s, s + strlen(s) - 1, 0) << std::endl;
   return 0;
}
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
26.09.2012, 15:16  [ТС]     Переводи из 2ной в 10ную #5
А я все лабу дописал,тему закрыть можно))
Yandex
Объявления
26.09.2012, 15:16     Переводи из 2ной в 10ную
Ответ Создать тему

Метки
двоичная, десятичная, С++ для начинающих
Опции темы

Текущее время: 23:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru