Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 10

Используя рекурсию, перемножить 2 натуральных числа не используя операции умножения и иметь логарифмическую сложность

01.03.2014, 21:27. Показов 3784. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа должна перемножать 2 натуральных числа не используя операции умножения и иметь логарифмическую сложность(помогите написать хотя бы рекурсивную функцию я то я вообще не могу вьехать))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.03.2014, 21:27
Ответы с готовыми решениями:

Написать функцию умножения двух,заданных с клавиатуры чисел, используя только операцию умножения и рекурсию
Помогите пожалуйста с рекурсией Написать функцию умножения двух,заданных с клавиатуры чисел, используя только операцию умножения и...

Не используя никаких операций, кроме умножения и присваивания, составить программу, вычисляющую a7 за 4 операции умножения
1.Дано число a. Не используя никаких операций, кроме умножения и присваивания, составить программу, вычисляющую a7 за 4 операции умножения;...

Определить значение n^3, не используя операции умножения
Определить значение {n}^{3}, не используя операции умножения. Известно что: {1}^{3}=1 {2}^{3}=3+5 {3}^{3}=7+9+11 ...

20
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
01.03.2014, 21:54
Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
scala> def f(n:Int,m:Int):Int={
     | if(m==0) 0
     | else n+f(n,m-1)
     | }
f: (n: Int, m: Int)Int
 
scala> f(2,2)
res1: Int = 4
 
scala> f(2,3)
res2: Int = 6
 
scala>


C++
1
2
3
4
int f(int n, int m){
  if (m==0) return 0;
  else return n+f(n,m-1);
}
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
01.03.2014, 23:17
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
C++
1
2
3
4
int f(int n, int m){
    if (m==0) return 0;
    else return n+f(n,m-1);
}
такая функция будет дольше исполняться, если второй аргумент больше первого, и чем больше между ними разница, тем заметнее будет замедление.
Поэтому можно предложить такую оптимизацию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
unsigned int multiply1(unsigned int a, unsigned int b)
{
    return b == 0 ? 0 : multiply1(a, b - 1) + a;
}
 
unsigned int multiply2(unsigned int a, unsigned int b)
{
    return a == 0 ? 0 : multiply2(a - 1, b) + b;
}
 
unsigned int mul(unsigned int a, unsigned int b)
{
    if(a == 0 || b == 0)
    {
        return 0;
    }
    return a > b ? (multiply1(a, b - 1) + a) : (multiply2(a - 1, b) + b);
}
2
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 10
02.03.2014, 18:04  [ТС]
не компилируется
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
32
33
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
 
using namespace std;
 
unsigned int multiply1(unsigned int a, unsigned int b)
{
    return b == 0 ? 0 : multiply1(a, b - 1) + a;
}
unsigned int multiply2(unsigned int a, unsigned int b)
{
    return a == 0 ? 0 : multiply2(a - 1, b) + b;
}
unsigned int mul(unsigned int a, unsigned int b)
{
    if (a == 0 || b == 0)
    {
        return 0;
    }
    return a > b ? (multiply1(a, b - 1) + a) : (multiply2(a - 1, b) + b);
}
int _tmain(int argc, _TCHAR* argv[])
{
    int n1, n2;
    cout << "Enter n1,n2: ";
    cin >> n1;
    cin>>n2;
    cout << "n1*n2=" <<  mul(n1, n2) << endl; // вызов рекурсивной функции
    _getch();
    return 0;
}
что значит у visual studio "возникли ошибки сборки" ,я уже несколько программ не могу проверить из-за этих ошибок сборки..хотя все вроде правильно.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
02.03.2014, 18:38
Может сами ошибки-то покажешь?
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
02.03.2014, 18:42
Решения "в лоб" не дадут логарифмической сложности. Интересно, операции разрядного сдвига вправо/влево допустимы?
0
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 10
02.03.2014, 23:39  [ТС]
DrOffset, вот такое постоянно выбрасывает ..теряюсь в догадках потому что никаких ошибок не вижу..и это происходит последним временем по отношении ко всем программам которые пишу.
Миниатюры
Используя рекурсию, перемножить 2 натуральных числа не используя операции умножения и иметь логарифмическую сложность  
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
02.03.2014, 23:43
Цитата Сообщение от Олександr Посмотреть сообщение
вот такое постоянно выбрасывает
А внизу в логе ошибок что пишет?
0
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 10
02.03.2014, 23:44  [ТС]
zer0mail, я относительно недавно пишу в среде так что я даже не знаю что вы у меня спросили.Задание полностью изложено.Возможен вариант программы без логарифмической сложности.
0
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 10
02.03.2014, 23:48  [ТС]
DrOffset,ничего по сути.Ошибки не подчеркивает.
Миниатюры
Используя рекурсию, перемножить 2 натуральных числа не используя операции умножения и иметь логарифмическую сложность  
0
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 10
02.03.2014, 23:49  [ТС]
DrOffset, я уже думаю что у меня что то с вижуалом.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
03.03.2014, 00:15
Олександr, архивируй проект целиком, можешь кинуть мне в личку или сюда, я посмотрю. Возможно что-то с настройками проекта.
0
алкокодер
 Аватар для UnsKneD
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
03.03.2014, 00:19
Олександr, а если просто хуллоу ворлд вывести?
0
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 10
04.03.2014, 22:14  [ТС]
Архив с програмой
Вложения
Тип файла: rar Лаб 1.3.rar (1.96 Мб, 8 просмотров)
0
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 10
04.03.2014, 22:20  [ТС]
UnsKneD,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "stdafx.h"
 
#include <iostream>
#include <conio.h>
#include <math.h>
 
 
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Hello,world";
    return 0;
}
НЕ КАТИТ(возникли ошибки сборки)
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
04.03.2014, 23:31
Олександr, скачал твой проект, запустил - работает все нормально.
Версия Visual Studio какая? Может попробовать ее переустановить?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
05.03.2014, 00:03
Цитата Сообщение от zer0mail Посмотреть сообщение
Решения "в лоб" не дадут логарифмической сложности. Интересно, операции разрядного сдвига вправо/влево допустимы?
а если нет?
то можно использовать умножение на 2
вот в таком виде
C++
1
a+=a;
но вот деление не знаю как

а так можно поразрядно умножать (разряды двоичные)

примерно так
C++
1
2
3
4
5
6
7
8
9
10
int fncMul(int a, int b,)
{
 if(b==0)
  return 0;
 if(b&1)
  return a+fncMul(a+a,b/2); 
 else
  return fncMul(a+a,b/2);
 
}
Добавлено через 50 секунд
Цитата Сообщение от Олександr Посмотреть сообщение
НЕ КАТИТ(возникли ошибки сборки)
может покажешь какие?
1
алкокодер
 Аватар для UnsKneD
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
05.03.2014, 04:48
Цитата Сообщение от Олександr Посмотреть сообщение
НЕ КАТИТ(возникли ошибки сборки)
студию не обновляли? другую студию поверх этой не ставили?
1
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
05.03.2014, 14:04
Цитата Сообщение от ValeryS Посмотреть сообщение
Сообщение от zer0mail
Решения "в лоб" не дадут логарифмической сложности. Интересно, операции разрядного сдвига вправо/влево допустимы?
а если нет?
то можно использовать умножение на 2
Если нет, то придется складывать и "складывать сложенное" При аккуратной работе можно обойтись и без деления. Но неясно, какой уровень подготовки предполагает это задание.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
05.03.2014, 14:17
Цитата Сообщение от zer0mail Посмотреть сообщение
При аккуратной работе можно обойтись и без деления.
как?
вот с делением я показал как реализовать лог. зависимость
Цитата Сообщение от zer0mail Посмотреть сообщение
то придется складывать и "складывать сложенное"
не понял переведи
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.03.2014, 14:17
Помогаю со студенческими работами здесь

Используя do while перемножить вводимые числа
Направьте в нужную сторону. Задача: пользователь вводит много чисел, которые последовательно умножаются, пока результат &lt;=1000; ...

Используя только операции умножения вычислить y = a^21 за шесть операций
5.Дано целое число a. Используя только операции умножения вычислить y = a^21 за шесть операций.

Используя только операции умножения, вычислить y = a^23 за шесть операций
6.Дано целое число a. Используя только операции умножения вычислить y = a^23 за шесть операций.

Написать программу умножения ряда нечётных натуральных чисел от 1 до 21, используя указатели
Добрый день! Есть задача, умножить числа 1 * 3 * 5 * 7 * ...* 21, используя циклы int main() { long long x = 1, dob = 1; ...

Возвести число в 10 степень, используя только четыре операции умножения
Подскажите что не так?При проверке на сайте пишет частичное решение. Задача: Напишите программу, которая возводит введенное число в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru