0 / 0 / 0
Регистрация: 10.11.2017
Сообщений: 42

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

10.11.2017, 20:47. Показов 118394. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача звучит следующим образом:
Напишите программу, котороя получает на вход два целых числа и находит их произведение, не использую операцию умножения. Учтите, что числа могут быть отрицательными.
Python
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
34
35
36
37
38
39
40
41
42
''' К задаче 1 на странице 141.'''
 
''' Блок ввода p1 и p2 '''
p1 = int(input('Какое число нужно умножит? ----> '))
p2 = int(input('На какое числ нужно умножить? -> '))
 
''' Блок присвоений '''
i = 0
x = 0
 
''' Основной код программы '''
 
''' Рассмотрим случай, когда p1 и p2 - положительные числа '''
if p1 >= 0 and p2 >= 0:
        while i < p2:
                x = x + p1
                i = i + 1
                print('Операция № ',i,'.',' Итог: ', x, '.', sep = '')
 
''' Рассмотрим случай, когда p1 и p2 - отрицательные числа '''
if p1 < 0 and p2 < 0:
        while i < l:
                x = x + (-p2)
                i = i + 1
                print('Операция № ',i,'.',' Итог: ', x,'.', sep = '')
 
''' Рассмотрим случай, когда p1 - число отрицательное, p2 - положительное '''
if p1 < 0 and p2 > 0:
        while i < p2:
                x = x + (-p1)
                i = i + 1
                print('Операция № ',i,'.',' Итог: ', x,'.', sep = '')
                
''' Рассмотрим случай, когда p1 - число положительное, p2 - отрицательное '''
if p1 > 0 and p2 < 0:
        while i < -p2:
                x = x + (-p1)
                i= i + 1
                print('Операция № ',i,'.',' Итог: ', x,'.', sep = '')
 
''' Ответ '''
print('Ответ: ', x, '.', sep = '')
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.11.2017, 20:47
Ответы с готовыми решениями:

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

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

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

18
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
10.11.2017, 21:36
ну а что проверять? введи два положительных числа, два отрицательных, и одно полож., одно отр. и посмотри результаты
строка 22 while i < l: откуда l ? вот тут исправь
0
102 / 75 / 38
Регистрация: 08.11.2017
Сообщений: 272
10.11.2017, 21:40
Лучший ответ Сообщение было отмечено TOTGeeak как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
x = int(input("Введите первое число"))
y = int(input("Введите второе число"))
result = 0
z = 0
 
while z != (abs(y)):
    result = result+(abs(x))
    z=z+1
 
if (y or x) < 0:
    result = -result
 
print(result)
а если так?
1
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
10.11.2017, 21:51
Python
1
2
if (y or x) < 0:
    result = -result
и что это дает ?
0
102 / 75 / 38
Регистрация: 08.11.2017
Сообщений: 272
10.11.2017, 21:53
меняет знак, если одно из чисел было отрицательным.
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
10.11.2017, 21:59
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> x= -1
>>> y = -2
>>> (y or x) < 0
True
>>> x= 1
>>> y = -2
>>> (y or x) < 0
True
>>> -1*-2
2
>>> 1*-2
-2
>>>
а результат?
Введите первое число-1
Введите второе число2
2
0
0 / 0 / 0
Регистрация: 10.11.2017
Сообщений: 42
10.11.2017, 22:11  [ТС]
Я не только про проверку кода. Просто вдруг есть более рациональный способ решения задачи.

Добавлено через 4 минуты
Спасибо, для меня весьма неочевидное решение, но более рациональное. Ещё раз спасибо.
0
102 / 75 / 38
Регистрация: 08.11.2017
Сообщений: 272
10.11.2017, 22:12
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
x = int(input("Введите первое число"))
y = int(input("Введите второе число"))
result = 0
z = 0
 
while z != (abs(y)):
    result = result+(abs(x))
    z=z+1
 
if (x<0 and y>0) or (x>0 or x<y):
   result = -result
 
print(result)
Вот так я думаю должно работать
0
0 / 0 / 0
Регистрация: 10.11.2017
Сообщений: 42
10.11.2017, 22:18  [ТС]
kratorr, Спасибо, весьма неочевидное для меня решение, но более рациональное. Спасибо.
0
102 / 75 / 38
Регистрация: 08.11.2017
Сообщений: 272
10.11.2017, 22:28
x<0 and y>0) or (x>0 and x<y):

вот тут and упустил
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
10.11.2017, 22:29
Python
1
2
3
4
5
6
7
8
9
10
 def sign(x,y):
    a,b = abs(x),abs(y)
    result = sum([b for _ in range(a)])
    if x<0 and y>0 or x>0 and y<0:
        return -result
    return result
 
x = int(input("Введите первое число "))
y = int(input("Введите второе число "))
print(sign(x,y))
0
21 / 20 / 16
Регистрация: 20.10.2017
Сообщений: 39
10.11.2017, 22:37
1) y раз сложить число x само с собой проще сделать в счетном цикле for. Убрать влияние знака можно взяв y по модулю.
2) Проверить знак произведения можно с помощью следующего свойства, если 0 лежит в отрезке (x,y), то произведение будет отрицательным. Нюанс, что выражение "0 in range(-2,3)" принимает значение True, а "0 in range(3,-2)" - False. Поэтому при проверке надо обязательно знать, что больше x или y. Это можно сделать c помощью if, но я просто собрал список из двух элементов и отсортировал его, мне кажется так проще.

Python
1
2
3
4
5
6
7
8
9
10
x = int(input())
y = int(input())
res = 0
for k in range(abs(x)):
    res += y
worklist = [x,y]
worklist.sort()
if 0 in range(worklist[0],worklist[1]):
    res = -res
print(res)
1
0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 3
23.11.2019, 20:36
Цитата Сообщение от kratorr Посмотреть сообщение
меняет знак, если одно из чисел было отрицательным.
У меня меняет только, если первое отриц. Если второе, то остаются минус

Добавлено через 3 минуты
Цитата Сообщение от distance Посмотреть сообщение
1
2
3
4
5
6
7
8
9
10
x = int(input())
y = int(input())
res = 0
for k in range(abs(x)):
    res += y
worklist = [x,y]
worklist.sort()
if 0 in range(worklist[0],worklist[1]):
    res = -res
print(res)
А здесь меняет знак только у второго числа
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
23.11.2019, 20:39
Вадим0101, ты дальше-то почитай...
0
0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 3
23.11.2019, 21:36
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Вадим0101, ты дальше-то почитай...
торможу, перепробованы все варианты из темы и в итоге какое либо из значений не меняет минус и итог отрицательный

Добавлено через 44 минуты
Цитата Сообщение от Вадим0101 Посмотреть сообщение
торможу, перепробованы все варианты из темы и в итоге какое либо из значений не меняет минус и итог отрицательный
у меня опыта нет. но сработала такая концовка после предложенных выше вариантов

Python
1
2
3
4
if res > 0:
    print(res)
else:
    print(res * -1)
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
23.11.2019, 21:45
Вадим0101,
Цитата Сообщение от TOTGeeak Посмотреть сообщение
не используя операцию умножения
0
0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 3
23.11.2019, 21:59
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Сообщение от TOTGeeak
не используя операцию умножения
моё понимание неверное, что операция умножения не используется только в подсчёте результата? Её нельзя применить и для изменения знака? Тогда какой код верен? Все предложенные выше варианты имеют при первом или втором отрицательном знак минус.

Добавлено через 10 минут
Цитата Сообщение от Вадим0101 Посмотреть сообщение
Сообщение от iSmokeJC
Сообщение от TOTGeeak
не используя операцию умножения
Такой вариант допустим?
if res > 0:
print(res)
else:
print(-res)
0
1 / 1 / 0
Регистрация: 04.04.2022
Сообщений: 2
20.01.2023, 18:40
Вот мой вариант
Code
1
2
3
4
5
6
7
8
9
a = int(input("1 число: "))
b = int(input("2 число: "))
c=0
if b<0:
 a=-a
 b=-b 
for n in range (b):
  c=c+a
print(c)
1
740 / 622 / 151
Регистрация: 04.03.2022
Сообщений: 1,272
24.01.2023, 10:00
Python
1
2
3
4
5
6
a = int(input("1 число: "))
b = int(input("2 число: "))
res = 0
for _ in range (abs(b)):
    res += abs(a)
print(((res, -res), (-res, res))[a>=0][b>=0])
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.01.2023, 10:00
Помогаю со студенческими работами здесь

Ввести два числа А и С. - Найти произведение этих чисел, используя только операцию сложения. - Вычислить АС, используя только операцию умножения
Ввести два числа А и С. - Найти произведение этих чисел, используя только операцию сложения. - Вычислить Аc, используя только...

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

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

Найти произведение двух чисел, используя только операцию сложения
Введите два числа (например, А = 5 и В = 8) и найдите их произведение, используя только операцию сложения. Заполните блок-схему...

Вычислить произведение чисел, не используя операцию умножения
1.Дано натуральные числа m и n.Вычислите их произведение не используя операцию умножения. 2.Дано натуральное число.Определить,равна ли...


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

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

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru