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

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

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

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

16.09.2012, 14:35. Просмотров 618. Ответов 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, А-старшая
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2012, 14:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция, перемножающая два числа с учётом переполнения (C++):

функция,задающая два числа - C++
Помогите пожалуйста написать программу в С++. Написать функцию,которая задает два числа и из этих чисел выводит число кратное 5,если оба...

Функция, находящая два максимальных числа в массиве и возвращающая структуру с этими числами - C++
Напишите функцию, находящую два максимальных числа в массиве и возвращающую структуру с этими числами и подробно расписать код.

Функция, которая получает в качестве параметров два целых числа и возвращает сумму - C++
Написать функцию, которая получает в качестве параметров два целых числа и возвращает сумму чисел из диапазона между ними Помогите:-| ...

Функция которая сравнивает два целых числа и возвращает результат сравнения в виде знака: >, < или = - C++
Используя функцию, которая сравнивает два целых числа и возвращает результат сравнения в виде знака: &gt;, &lt; или =, вычислить количество...

Обработка исключительной ситуации переполнения вещественного числа - C++
Помогите написать программу, которая выполняет обработку исключительной ситуации переполнения вещественного числа, я в целов поняла, что...

Функция которая находит два крайних положительных числа и сортирует массив слева от левого элемента, и справа - C++
Функция которая находит два крайних положительных числа и сортирует массив слева от левого элемента, и справа - от правого. Функция...

4
edward_jonson
158 / 158 / 25
Регистрация: 23.02.2011
Сообщений: 392
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;
}
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;
}
0
BREAK350
1 / 1 / 0
Регистрация: 08.07.2012
Сообщений: 23
16.09.2012, 16:34  [ТС] #4
а это будет работать если взять unsigned long int?
0
veverix
39 / 39 / 2
Регистрация: 14.09.2012
Сообщений: 85
16.09.2012, 18:47 #5
Цитата Сообщение от BREAK350 Посмотреть сообщение
а это будет работать если взять unsigned long int?
Зачем? Вся суть в том, что мы ограничены 2 байтами. По идее будет работать.
0
16.09.2012, 18:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2012, 18:47
Привет! Вот еще темы с ответами:

Сравните два числа A и B. Задан два целых неотрицательных числа A и B - C++
Сравните два числа A и B. Задан два целых неотрицательных числа A и B (A, B &lt;= 1010000) каждое в своей строке. Найти разность двух...

подскажите что с кодом не так? (просуммировать два раза по два столбца, функция) - C++
Нужно создать функцию для суммирования двух столбцов и просуммировать два раза по два столбца. Сам массив задала, а функция работает не...

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

Задать два числа как два массива и потом выполнить сложение, умножение и деление - C++
Здравствуйте! Суть задачи в следующем: Нужно задать два числа как два массива и потом выполнить сложение, умножение и деление с помощью...


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

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

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