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

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

Войти
Регистрация
Восстановить пароль
 
BREAK350
1 / 1 / 0
Регистрация: 08.07.2012
Сообщений: 23
#1

Функция, перемножающая два числа с учётом переполнения - C++

16.09.2012, 14:35. Просмотров 560. Ответов 4
Метки нет (Все метки)

привет)
помогите пожалуста с задачкой:
есть 2 числа типа unsigned short int (в програме использивать только short, нельзя брать что то, что больше 2байт). нужно реализовать функцию
unsigned short int Create(unsigned short int a,unsigned short int b,unsigned short int &c);
где, a,b-эти два числа, c-результат множения, тоисть
c=a*b;
но как мы знаем, этот результат может бить больше чем может хранить unsigned short int. Поэтому эта функция должна возвращать эту патерю. как я выяснил, результат должен бить таким:
A*(2 в степени 16)+c,
где A- то что возвращает функция. другими словами, с-младшая часть int, А-старшая
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2012, 14:35     Функция, перемножающая два числа с учётом переполнения
Посмотрите здесь:

C++ Функция которая сравнивает два целых числа и возвращает результат сравнения в виде знака: >, < или =
C++ функция,задающая два числа
C++ Задать два числа как два массива и потом выполнить сложение, умножение и деление
подскажите что с кодом не так? (просуммировать два раза по два столбца, функция) C++
Как сделать из двухзначного числа два числа через пробел? C++
C++ Функция, находящая два максимальных числа в массиве и возвращающая структуру с этими числами
C++ Функция, которая получает в качестве параметров два целых числа и возвращает сумму
C++ Сравните два числа A и B. Задан два целых неотрицательных числа A и B
Ввести два числа, а вывести ряд от первого числа до второго C++
C++ Нужно ввести два числа, а вывести ряд от первого числа до второго
Обработка исключительной ситуации переполнения вещественного числа C++
C++ Образуем два шестизначных числа приписав единицы впереди числа А и в конце его

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
edward_jonson
 Аватар для edward_jonson
157 / 157 / 25
Регистрация: 23.02.2011
Сообщений: 388
16.09.2012, 14:56     Функция, перемножающая два числа с учётом переполнения #2
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
typedef unsigned short us;
 
us Create(us a, us b, us &c)
{
    if ( a * b >= pow(2, 16) )
    {
        us toRet = (a*b) / pow(2, 16);
        c = a*b - toRet * pow(2, 16);
        return toRet;
    }
    else
    {
        c = a * b;
        return 0;
    }
}
 
int main()
{
    us lowp = 0, highp = 0;
    us a = 1024, b = 1025;
    highp = Create(a, b, lowp);
    cout << highp << " * " << pow(2, 16) << " + " << lowp << " = " << (int)(highp * pow(2, 16) + lowp) << endl
         << a << " * " << b << " = " << (int)(a * b);
    return 0;
}
veverix
39 / 39 / 2
Регистрация: 14.09.2012
Сообщений: 85
16.09.2012, 15:02     Функция, перемножающая два числа с учётом переполнения #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cmath>
 
using namespace std;
 
unsigned short int a, b, c, overflow;
 
unsigned short int create(unsigned short int a, unsigned short int b, unsigned short int &c)
{
    c = a*b;
    return a*b>>16;
}
 
int main()
{
    cout<<"Vvedite argumenti"<<endl;
    cin>>a>>b;
    overflow = create(a, b, c);
    cout<<overflow*pow(2.0, 16.0)+c<<endl;
    system("pause");
    return 0;
}
BREAK350
1 / 1 / 0
Регистрация: 08.07.2012
Сообщений: 23
16.09.2012, 16:34  [ТС]     Функция, перемножающая два числа с учётом переполнения #4
а это будет работать если взять unsigned long int?
veverix
39 / 39 / 2
Регистрация: 14.09.2012
Сообщений: 85
16.09.2012, 18:47     Функция, перемножающая два числа с учётом переполнения #5
Цитата Сообщение от BREAK350 Посмотреть сообщение
а это будет работать если взять unsigned long int?
Зачем? Вся суть в том, что мы ограничены 2 байтами. По идее будет работать.
Yandex
Объявления
16.09.2012, 18:47     Функция, перемножающая два числа с учётом переполнения
Ответ Создать тему
Опции темы

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