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

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
#1

Делить на ноль нельзя? - C++

23.07.2011, 18:11. Просмотров 2195. Ответов 16
Метки нет (Все метки)

Я в курсе, нельзя. Но это было бы полбеды. Проблема в том, что судя по всему, нельзя делить не только на ноль. Есть интересная задача и неинтересное
решение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
using namespace std;
 
int main()
 {
    long long a, b;
 
    cin >> a >> b;
  
    if (b == 0)
        cout << "ERROR";
    else
        cout << a / b;
 
    cout << endl;
 
    return 0;
 }


И, понятно, оно не проходит в одном тесте. В чем же таки подвох? Сам вопрос, наверное, должен звучать так: "При каких двух 32-битных числах со знаком частное от деления невозможно представить в формате 32-битного числа со знаком (делимое не нуль) ?"
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2011, 18:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Делить на ноль нельзя? (C++):

Умножить, делить.. - не работает! - C++ Builder
Приветствую! Возникла нелепость.. float __fastcall TMainForm::GetSpeed() { float sec = second; // second, minute, RightPresses...

Перевод десятичного вещественного числа в двоичное путем побитовых операций (Делить на 2 нельзя) - C++
Нужно написать код на С++, который переводит вещественное десятичное число в двоичное с помощью битовых операторов(Сдвиги, &amp;, | и т.п) ...

Как делить? - C++
&quot;Вычислить, для заданного вещественного X и натурального N значение выражения: Х/(5+X/(6+X/(7+X/(…/(N+X))…)&quot;.У меня только один вопрос,как...

Предложения делить на слова - C++
Здравствуйте! Я делаю это примерно так: char *indicators = (char*)fileInd.content; char *word = new char; char *charWord = word;...

Как делить деньги? - C++
есть 4 числа int (рубль(1),коп(1) ; рубль(2),коп(2)) их нужно поделить и умножить, в результате получить 1 число: рубль(3)коп(3). как...

Задача: делить числа на отдельные цифры - C++
У меня проблема. Имеется такая задача: попросить пользователя ввести 5-ти значное число и напечатать их отдельно цифрами, между цифрами 2...

16
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.07.2011, 18:53 #2
Если вопрос про 32-битное число, почему используешь long long?
Или я чего-то не понял?

Добавлено через 3 минуты
Ой, понял. Есть ещё одна такая пара чисел, что переполнение происходит.) Хорошая задача. Плюсик тебе.)
1
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
23.07.2011, 19:01  [ТС] #3
Deviaphan, а есть мысли насчет оставшегося теста?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.07.2011, 19:09 #4
Какого теста?
Ответ на вопрос прост: a = INT_MIN, b = -1
2
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,275
Записей в блоге: 2
Завершенные тесты: 1
23.07.2011, 19:09 #5
MSVS 2010, собака, для результата a/b автоматически делает _int64, если принудительно задать int, то ответ неправильный (делимое выводит) ))
1
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
23.07.2011, 19:21  [ТС] #6
Deviaphan, у меня вроде все правильно вышло, прилагаю. Или я где-то жестко туплю?
0
Миниатюры
Делить на ноль нельзя?  
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,275
Записей в блоге: 2
Завершенные тесты: 1
23.07.2011, 19:26 #7
iama, дело в том, что ответ должен быть положительное число, а INT_MAX= |INT_MIN|-1, т.е. в int невлазиет. Если ты выполняешь программу в таком виде, как в первом посте, то читай мой пост выше.
2
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
23.07.2011, 19:29  [ТС] #8

Это надо мне так тупить огромное спасибо, я бы долго еще медитировал
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.07.2011, 19:34 #9
А ещё лучше читай мой первый пост. long long это синоним _int64, т.е. компилятору даже ничего преобразовывать не надо, ты сам ему 64 битные числа указал.
Но и в твоём варианте такая же пара чисел существует, просто а немного меньше.)
1
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
23.07.2011, 19:47  [ТС] #10
Цитата Сообщение от Deviaphan Посмотреть сообщение
А ещё лучше читай мой первый пост. long long это синоним _int64, т.е. компилятору даже ничего преобразовывать не надо, ты сам ему 64 битные числа указал.
Но и в твоём варианте такая же пара чисел существует, просто а немного меньше.)
Я ж и подозревал, что как-то переполнение может образоваться, просто не мог понять, как именно, деление ж все таки по мне - для этой конретной задачи легче грубый костыль сделать, так вот решил
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
using namespace std;
 
int main()
 {
    long long a, b;
 
    cin >> a >> b;
  
    if (b == 0 || a / b == 2147483648)
        cout << "ERROR";
    else
        cout << a / b;
 
    cout << endl;
 
    return 0;
 }
Зашло в полный балл
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.07.2011, 19:51 #11
Только ты для INT64_MIN / -1 ситуацию не обработал.)
0
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
23.07.2011, 19:57  [ТС] #12
Цитата Сообщение от Deviaphan Посмотреть сообщение
Только ты для INT64_MIN / -1 ситуацию не обработал.)
По условию, входные данные - 32-битные числа, так что в этой задаче это не нужно
0
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,930
23.07.2011, 20:06 #13
деление на 0 можно обработать исключением
а переполнение разрядной сетки в ассемблере обрабатывается на раз
может и на С как нибудь так
C
1
2
3
4
5
6
asm{
mov eax,a;
mov ebx,b;
div eax,ebx;
jc error ; //переход если выставлен флаг переполнения
}
не проверял просто мысли вслух
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.07.2011, 20:37 #14
Цитата Сообщение от ValeryS Посмотреть сообщение
деление на 0 можно обработать исключением
Можно. SEH.
0
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,930
23.07.2011, 20:51 #15
Цитата Сообщение от Kastaneda Посмотреть сообщение
ответ неправильный (делимое выводит)
ответ и не может быть правильным
INT_MIN=0х80000000 не имеет положительного аналога
0х80000000=-2147483648
а 2147483648( не существует) тоже будет 0х80000000
максимальное число 2147483647=0x7FFFFFFF
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2011, 20:51
Привет! Вот еще темы с ответами:

Сколько раз необходимо число 5000 делить пополам - C++
Сколько раз необходимо число 5000 делить пополам, чтобы результат деления был меньше 30. Нужно использовать for ,while, do while. ...

Задача 94. В заданном целочисленном массиве опре¬делить количество перемен знаков - C++
Задача 94. В заданном целочисленном массиве опре¬делить количество перемен знаков.

дана действительная матрица размера m*n делить числа b1,.,bm равные соответственно произведение элементов ст - C++
дана действительная матрица размера m*n делить числа b1,...,bm равные соответственно произведение элементов строк.Помогите(только не...

Гражданин 1 марта открыл счет в банке, вложив 1000 руб. Через каждый месяц размер вклада увеличивается на 2% от имеющейся суммы. Опре-делить: а) прир - C++
Гражданин 1 марта открыл счет в банке, вложив 1000 руб. Через каждый месяц размер вклада увеличивается на 2% от имеющейся суммы....


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
23.07.2011, 20:51
Ответ Создать тему
Опции темы

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