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

Замена оператора % - C++

Восстановить пароль Регистрация
 
Odyss
0 / 0 / 0
Регистрация: 14.11.2016
Сообщений: 9
Завершенные тесты: 1
14.11.2016, 00:52     Замена оператора % #1
Привет всем форумчанам! Впервые тут, так как только начал учиться программировать.

Подскажите, кто знает - как заменить оператор %? то есть, есть ли другие способы деления с модулем, не используя оператор %? Заранее спасибо всем за ответ.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2016, 00:52     Замена оператора %
Посмотрите здесь:

перегрузка оператора + C++
Перегрузка оператора C++
C++ Перегрузка оператора !=
Вызов прегруженного оператора вывода в поток из аналогичного оператора C++
C++ Замена букв в предложении. Не работает замена кириллицы
C++ Неправильная работа оператора присваивания после работы оператора суммирования
C++ Избыточное копирование объекта при реализации оператора умножения и оператора присваивания
Перегрузка оператора C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2134 / 967 / 223
Регистрация: 30.11.2013
Сообщений: 3,235
14.11.2016, 01:08     Замена оператора % #2
Odyss,

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
 
int main()
{
    const int num = 19;
    const int delim = 5;
 
    cout << num % delim << endl;
    cout << num - (int)(num / delim)*delim << endl;
}
Байт
 Аватар для Байт
13964 / 8795 / 1223
Регистрация: 24.12.2010
Сообщений: 15,930
14.11.2016, 02:02     Замена оператора % #3
rikimaru2013, Можно на несколько символов короче
C++
1
cout << num - (num / delim)*delim << endl;
Она сама догадается...
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2899 / 1435 / 395
Регистрация: 18.10.2014
Сообщений: 2,643
14.11.2016, 12:26     Замена оператора % #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Odyss Посмотреть сообщение
то есть, есть ли другие способы деления с модулем, не используя оператор %?
Вам уже привели тот способ, котрый часто встречается тут в коде студентов, не знающих о существовании оператора %

Можно также добавить, что стандартная библиотека языка С содержит функцию div, которая вычисляет пару из частного и остатка

C++
1
2
3
4
5
6
7
8
#include <cstdlib>
#include <iostream>
 
int main()
{
  std::div_t pair = std::div(42, 11);
  std::cout << pair.rem << std::endl;
}
А также, если делимое является степенью 2, то оператор % может быть легко заменен на битовую операцию

C++
1
2
3
4
5
6
7
#include <iostream>
 
int main()
{
    unsigned num = 42, den = 8;
    std::cout << (num & (den - 1)) << std::endl;
}
Но это работает "правильно" только для положительных операндов. А для отрицательных - поведение зависит от ряда факторов.

Добавлено через 10 часов 3 минуты
Цитата Сообщение от Байт Посмотреть сообщение
rikimaru2013, Можно на несколько символов короче
C++
1
cout << num - (num / delim)*delim << endl;
Она сама догадается...
Ну тогда уж еще короче

C++
1
cout << num - num / delim * delim << endl;
zer0mail
2185 / 1868 / 187
Регистрация: 03.07.2012
Сообщений: 6,640
Записей в блоге: 1
14.11.2016, 17:21     Замена оператора % #5
ТС, зачем вам нужны другие способы? Может, нужны также для * + - и пр?
Yandex
Объявления
14.11.2016, 17:21     Замена оператора %
Ответ Создать тему
Опции темы

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