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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 226
#1

Умножение в двоичной системе - C++

31.05.2014, 21:47. Просмотров 1295. Ответов 21
Метки нет (Все метки)

Добрый вечер. Помогите с реализацией умножения в двоичной системе. Дано два массива, например 1111 и 1111. Как написать цикл умножения друг на друга?

Добавлено через 56 минут
Я так понимаю нужно как-то создавать массивы, равные кол-ву элементов массива, и складывать их, но как реализовать на практике - хоть убейте не понимаю

Добавлено через 27 минут
Ну помогите пожалуйста, мне нужен только небольшой цикл в качестве примера
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2014, 21:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Умножение в двоичной системе (C++):

Умножение двух чисел в двоичной системе счисления - C++
Всем доброго времени суток! Мучаю эту программу уже который день, но правильно она складывать числа в двоичной системе счисления...

Калькулятор в двоичной системе - C++
Сложение в двоичной системе. Подскажите почему не верные ответы выдает? #include "stdafx.h" #include <iostream> #include <string> ...

Вычитание в двоичной системе счисления - C++
Нужно провести вычитание напрямую, без преобразования в десятичную систему счисления. Пользовался поиском, но не нашел данный алгоритм,...

Сложение в двоичной системе счисления - C++
//--------------------------------------------------------------------------- #include <stdio.h> #include <string.h> #include...

Сложение в двоичной системе счисления - C++
Добрый день! Помогите пожалуйста, не знаю как реализовать. Например n = 1010.1111 m = 1011.0101 . Я понимаю как сделать это на бумаге, но...

Представление float в двоичной системе - C++
Смысл: требуется написать программу, показывающую двоичную структуру float. Запускаем: вводится первое число с плавающей запятой,...

21
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.06.2014, 06:11 #16
Denis123456789, момент с разделителем в get я действительно не учел, но вот вычитать единицу вручную не надо. get считывает n-1 символ максимум.
0
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 226
01.06.2014, 17:05  [ТС] #17
Цитата Сообщение от Denis123456789 Посмотреть сообщение
метод get (char buf[],int n,char razd='\n') читает n символов из входного потока и помещает их в массив buf, чтение приостанавливается преждевременно, если очередной символ входного потока равен razd, при этом символ разделителя остается во входном потоке. В итоге вы вводите первое число и нажимаете enter, первый оператор get считывает все до символа '\n', а второй сразу встречает '\n' и прекращает считывание, при этом во втором буфере оказывается только символ конца строки, который автоматически вставляется в буфер методом get, поэтому, кстати, надо считывать sizeof()-1 символ, чтобы для него было место в буфере.
А вот метод getline работает так же как get, но если встречает символ разделителя удаляет его из входного потока.
Т. е. допусти я ввожу число 101010. Этот cin.getline(bvector1, sizeof(bvector1)); сделает из массива со 100 элементами массив с 6 элементами?

И еще такой вопрос, если я захочу переделать этот код в умножение например в восьмеричной системе, что нужно переделать?
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 181
01.06.2014, 18:06 #18
Цитата Сообщение от niikiita Посмотреть сообщение
Т. е. допусти я ввожу число 101010. Этот cin.getline(bvector1, sizeof(bvector1)); сделает из массива со 100 элементами массив с 6 элементами?
нет массив будет из 100 элементов в любом случае, но полезная информация будет находится только в первых шести, седьмым будет '\0', который будет отделять используемую информацию, от остальной части массива.
Цитата Сообщение от niikiita Посмотреть сообщение
И еще такой вопрос, если я захочу переделать этот код в умножение например в восьмеричной системе, что нужно переделать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <string>
#include <cstring>      
 
using namespace std;
 
int main()
{
    int osnovanie = 8;
    char bvector1[100]; char bvector2[100]; int rezult[100];
    cin.getline(bvector1, sizeof(bvector1)-1);
    cin.getline(bvector2, sizeof(bvector2)-1);
 
 
    int L1 = strlen(bvector1);
 
    int L2 = strlen(bvector2);
 
    for (int i = 0; i < L1 + L2; i++) rezult[i] = 0;
    for (int i = L2 - 1; i >= 0; i--)
    {
 
        for (int j = L1 - 1; j >= 0; j--)
        {
            
                rezult[j + i + 1] += (bvector1[j] - '0') * (bvector2[i] - '0');
                if (rezult[j + i + 1] > osnovanie-1) {              
                    rezult[i + j] += rezult[j + i + 1]/osnovanie;
                    rezult[j + i + 1] %= osnovanie;
                }
            }
        }
    for (int i = 0; i < L1 + L2; i++) cout << (int)rezult[i];
    system("Pause");
    return 0;
}
ну вот сделал вроде для произвольной с основанием osnovanie, но только, если основание больше 10, то надо в массив результата символы цифр больше 9 в виде букв прописывать
1
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 226
04.06.2014, 23:04  [ТС] #19
Цитата Сообщение от Denis123456789 Посмотреть сообщение
нет массив будет из 100 элементов в любом случае, но полезная информация будет находится только в первых шести, седьмым будет '\0', который будет отделять используемую информацию, от остальной части массива.
А каким образом это поможет от переполнения буфера?
Цитата Сообщение от Denis123456789 Посмотреть сообщение
надо в массив результата символы цифр больше 9 в виде букв прописывать
Как это сделать? чувствую себя попрошайкой, но у меня не получается сделать
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 181
06.06.2014, 03:10 #20
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <string>
#include <cstring>      
 
using namespace std;
 
int main()
{
    int osnovanie = 16;
    char bvector1[100]; char bvector2[100]; unsigned char rezult[100];
    cin.getline(bvector1, sizeof(bvector1)-1);
    cin.getline(bvector2, sizeof(bvector2)-1);
 
 
    int L1 = strlen(bvector1);
 
    int L2 = strlen(bvector2);
 
    for (int i = 0; i < L1 + L2; i++) rezult[i] = 0;
    for (int i = L2 - 1; i >= 0; i--)
    {
 
        for (int j = L1 - 1; j >= 0; j--)
        {
            
            rezult[j + i + 1] += ((bvector1[j] >= 'A' && bvector1[j] <= 'Z') ? 10 +  bvector1[j]-'A' : (bvector1[j] - '0')) * ((bvector2[i] >= 'A' && bvector2[i] <= 'Z') ? 10 +  bvector2[i]-'A' : (bvector2[i] - '0'));
            if (rezult[j + i + 1] > osnovanie - 1) {
                rezult[i + j] += rezult[j + i + 1] / osnovanie;
                rezult[j + i + 1] %= osnovanie;
            }
            
        }
        if (rezult[L1 + i ] > 9)
            rezult[L1 + i ] = 'A' + rezult[L1 + i ] - 10;
        else rezult[L1 + i ] += '0';
    }
    rezult[L1 + L2] = '\0';
    for (int i = 0; i < L1 ; i++)
    {
        if (rezult[i] > 9)
            rezult[i] = 'A' + rezult[i] - 10;
        else rezult[i] += '0';
    }
    cout << rezult;
    system("Pause");
    return 0;
}
ну как-то так, вроде работает

Добавлено через 7 минут
Цитата Сообщение от niikiita Посмотреть сообщение
А каким образом это поможет от переполнения буфера?
ну если ввести 200 символов конструкция cin.getline() считает только 99, а остальные оставит в потоке, а оператор >>так и будет считывать пока не встретит символ окончания ввода
0
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 226
08.06.2014, 23:10  [ТС] #21
Цитата Сообщение от Denis123456789 Посмотреть сообщение
у как-то так, вроде работает
Что значит "? 10"
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 181
09.06.2014, 00:03 #22
Что значит "? 10"
это условный тернарный оператор условие?значение1:значение2, например
a>b?a:b, если условие истинно (a>b), то возвращает значение1(a), если ложно-значение2(b)
0
09.06.2014, 00:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2014, 00:03
Привет! Вот еще темы с ответами:

Сложение в двоичной системе счисления - C++
можете реализовать эту задачку? Сложение в двоичной системе счисления

Калькулятор в двоичной системе (схемотехника) - C++
Помогите написать код для программы proteus isis Калькулятор в двоичной системе предмет схемотехника(ниже прикладываю фото схемы)и...

Сложение чисел в двоичной системе счисления - C++
Напишите программу, реализующую сложение чисел в двоичной системе счисления с использованием контроля по модулю. Вопрос. что значит &quot;с...

Вывод десятичных чисел в двоичной системе - C++
Заданы два числа &lt;=16. Найти их сумму и с помощью битовых операций записать оба слагаемых и их сумму одно за другим в ячейку памяти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru