Форум программистов, компьютерный форум, киберфорум
Наши страницы
Алгоритмы
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
bambino
194 / 20 / 5
Регистрация: 05.08.2010
Сообщений: 229
1

Целечисленная арифметика

26.08.2011, 22:48. Просмотров 2409. Ответов 43
Метки нет (Все метки)

Всем привет.
Есть интересная задачка(как по мне): дано 2 числа(целых) вывести большее из них, используя только такие операции как + - * /, т. е. никаких if, for, деф. фу-ий, etc.
Зарание всем спасибо за участие)
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2011, 22:48
Ответы с готовыми решениями:

Длинная арифметика
Прошу выложить детерминированный алгоритм умножения двух длинных чисел. В отместку выложу...

Длинная арифметика
Народ, есть у кого-нить прога такая? Просто пишу свою и нужно сравнить по производительности, а...

Компьютераня арифметика
Здравствуйте. Пока разбирался с "компьютерной" арифметикой родился следующий вопрос. Праильно ли я...

Модулярная длинная арифметика
Здравствуйте. Есть алгоритм Баррета(псевдокод): Вход: многоразрядные числа x, n Выход: r=...

Арифметика!
Дано натуральное число n. Вычислить: (1+1/1*1)+(1+1/2*2)+(1+1/3*3)+...+(1+1/n*n) Скажу всем...

43
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
27.08.2011, 12:47 21
Цитата Сообщение от Thinker Посмотреть сообщение
Но без операции деления это невозможно,
Да, но деление только на 2.
Классический вариант
Код
mx:=(a+b+abs(a-b)) div 2;
Также и при использовании корня, тоже деление только на 2.
1
Thinker
Эксперт С++
4243 / 2217 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.08.2011, 12:51 22
Цитата Сообщение от Puporev Посмотреть сообщение
Да, но деление только на 2.
Классический вариант
Код
mx:=(a+b+abs(a-b)) div 2;
Также и при использовании корня, тоже деление только на 2.
Как-никак, но деление есть, без него (только +,-,*) невозможно.
1
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
27.08.2011, 12:53 23
Так в условии деление есть
Цитата Сообщение от bambino Посмотреть сообщение
операции как + - * /,
Просто нужно избегать деления с участием переменных, чтобы не получить деление на 0.
1
Thinker
Эксперт С++
4243 / 2217 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.08.2011, 12:55 24
Цитата Сообщение от Puporev Посмотреть сообщение
Так в условии деление есть
Я с вами не спорю, мое доказательство относится к тому, что если убрать /, то все
1
27.08.2011, 12:55
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
27.08.2011, 12:56 25
Короче все-равно мы задачу с приведенным условием не решаем...
1
Thinker
Эксперт С++
4243 / 2217 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.08.2011, 13:25 26
Кстати, алгоритм murderer неверен, если a=b (как он и уточнил). Так что вопрос с делением открыт.
0
Mr.X
Эксперт С++
3193 / 1720 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
27.08.2011, 15:47 27
Цитата Сообщение от bambino Посмотреть сообщение
Я так понимаю, что решения для чисел которые из Z, не существует ?
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
/////////////////////////////////////////////////////////////////////////////////////////
// дано 2 числа(целых) вывести большее из них, используя только такие операции как + - * /, 
//т. е. никаких if, for, деф. фу-ий, etc.
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    for(;;)
    {
        std::cout << std::endl
                  << "a = ";
        int  a = 0;
        std::cin >> a;
 
        std::cout << "b = ";
        int  b = 0;
        std::cin >> b;
 
 
        std::cout << "max(a, b) = "                  
                  << (a + b + (4 * (a - b) + 3) / (4 * (a - b) + 2) * 2 * (a - b) - (a - b)) / 2
                  << std::endl;    
    }
}
2
Thinker
Эксперт С++
4243 / 2217 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.08.2011, 15:58 28
Mr.X, хитро, и знаменатель в целых числах корней не имеют
0
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
27.08.2011, 16:02 29
Например при a=-6 b=5 max=-6.

Добавлено через 2 минуты
Да и вообще какое вводишь первым, то и максимальное...
1
bambino
194 / 20 / 5
Регистрация: 05.08.2010
Сообщений: 229
27.08.2011, 16:08  [ТС] 30
Цитата Сообщение от Puporev Посмотреть сообщение
Например при a=-6 b=5 max=-6.
Добавлено через 2 минуты
Да и вообще какое вводишь первым, то и максимальное...
Это вы про вариант Mr.X ?
0
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
27.08.2011, 16:10 31
Да, про него... Остальные уже вроде обсудили..
0
Mr.X
Эксперт С++
3193 / 1720 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
27.08.2011, 16:12 32
Цитата Сообщение от Puporev Посмотреть сообщение
Например при a=-6 b=5 max=-6.
Добавлено через 2 минуты
Да и вообще какое вводишь первым, то и максимальное...
Это вы сейчас с кем разговаривали?
1
bambino
194 / 20 / 5
Регистрация: 05.08.2010
Сообщений: 229
27.08.2011, 16:15  [ТС] 33
Цитата Сообщение от Puporev Посмотреть сообщение
Да, про него... Остальные уже вроде обсудили..
Чушь несете, однако, пройдите по ссылке - http://liveworkspace.org/code/1a8bfa6db5cf788e4b7c565036ddf2ab

Добавлено через 56 секунд

Не по теме:

Цитата Сообщение от Mr.X Посмотреть сообщение
Это вы сейчас с кем разговаривали?
Да походу сам с собой, так-как к вашему варианту эта критика неумесна.

0
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
27.08.2011, 17:03 34
Цитата Сообщение от bambino Посмотреть сообщение
Чушь несете, однако
Во первых там формула не такая как у автора, а потом, пересчитайте ее на бумажке при a=-6 b=5;
У меня получается -41/-42

Добавлено через 1 минуту
Старайтесь не пользоваться он-лайн сервисами, там еще и не такое может выдать.

Добавлено через 9 минут
Что-то я совсем запутался с этими формулами...
0
grizlik78
Эксперт С++
2111 / 1552 / 229
Регистрация: 29.05.2011
Сообщений: 3,223
27.08.2011, 17:07 35
Цитата Сообщение от Puporev Посмотреть сообщение
Старайтесь не пользоваться он-лайн сервисами, там еще и не такое может выдать.
Бумажка, как частный случай онлайн-сервиса, это убедительно подтверждает
0
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
27.08.2011, 17:09 36
Да уже понял, там формула просто на экран не входит. Но у меня в Турбо Паскале это не работает, выдает упорно -6.
0
grizlik78
27.08.2011, 17:16
  #37

Не по теме:

А кстати, для Паскаля онлайн-компиляторы есть?

0
iama
27.08.2011, 17:17
  #38

Не по теме:

grizlik78, http://www.onlinecompiler.net/pascal.html ;)

1
grizlik78
27.08.2011, 17:18
  #39

Не по теме:

Да, спасибо, я и сам через 5 сек после вопроса нашёл :D

0
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
27.08.2011, 17:18 40
Все, нашел, только не понял почему при вещественных операциях ерунду выдает.
Pascal
1
2
3
4
5
6
7
8
9
10
var a,b,k:integer;
    c:real;
begin
a:=-6;
b:=5;
c:=(a+b+(4*(a-b)+3)/    (4*(a-b)+2)*2*(a-b)-(a-b)) / 2;
k:=(a+b+(4*(a-b)+3) div (4*(a-b)+2)*2*(a-b)-(a-b)) div 2;
writeln('c=',c:0:0);{вывод с=-6}
write('k=',k);{вывод к=5}
end.
0
27.08.2011, 17:18
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2011, 17:18

Арифметика
составить программу, вычисляющую произведение двух наименьших из четырех заданных чисел...напишите...

Арифметика в C
Дано натуральное число n. Проверить содержит ли оно три одинаковые цифры. Например 12322. Содержит....

арифметика. a*b +a^3/3 +b^3/2+b
Люди прошу можете слегка помочь,так сказать указать на ошибки просто уже не пойму где и что делаю...


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

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

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