Кажется, пора привыкнуть, но не перестаю удивляться идиотизму задаваемых иногда задач. «Главное — скорость», и поэтому нельзя применять специально сделанную для этого в процессоре аппаратную фичу.
«Нужно выиграть этап Формулы-1, но мотор на вашем болиде должен быть от ‘Запорожца’ «
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
Существуют ограничения на диапазон представляемых чисел в зависимости от типа данных.
Это же Python — ограничение только размером памяти
f3000.jpg
Пользователь
Регистрация: 02.10.2019
Сообщений: 10
Кажется, пора привыкнуть, но не перестаю удивляться идиотизму задаваемых иногда задач. «Главное — скорость», и поэтому нельзя применять специально сделанную для этого в процессоре аппаратную фичу.
«Нужно выиграть этап Формулы-1, но мотор на вашем болиде должен быть от ‘Запорожца’ «
ну уж сорян, это проектирование алгоритмов. если хочешь полный текст задачи — вот он:
Вы один из немногих выживших в постапокалиптическом мире. Во время очередного рейда в опустошенный город вы нашли экзотический механический компьютер. К сожалению, вы обнаружили, что из арифметических операций он умеет только складывать, вычитать, умножать на 2 и делить на 2 целые числа. Но чтобы им пользоваться повседневно надо уметь умножать любые целые числа.
Умножение в столбик. Как правильно умножать в столбик? Как объяснить умножение в столбик?
Как это можно сделать на таком компьютере эффективно? Напишите функцию, которая выполняет умножение двух числе с использованием только +, -, > (деление на 2).
Регистрация: 04.02.2011
Сообщений: 4,439
экзотический механический компьютер.
Этакий арифмометр Феликс. Со встроенным компилятором Python’а . Ну-ну.
Вот так мы сидим, озадачиваемся почесанием левой ногой правого уха, а компиляторы и ОС для нас строгают дядюшка Билл и дядюшка Радж.
Последний раз редактировалось digitalis; 18.10.2019 в 20:17 .
Источник: www.programmersforum.ru
Программа на C++ для умножения двух чисел
В этой программе на C++ пользователя просят ввести два числа (числа с плавающей запятой). Затем произведение этих двух чисел сохраняется в переменной и отображается на экране.
#include using namespace std; int main() < double firstNumber, secondNumber, productOfTwoNumbers; cout > firstNumber >> secondNumber; // Performs multiplication and stores the result in variable productOfTwoNumbers productOfTwoNumbers = firstNumber * secondNumber; cout Enter two numbers: 3.4 5.5 Product = 18.7
В этой программе пользователю предлагается ввести два числа. Эти два числа, введенные пользователем, сохраняются в переменных firstNumber и secondNumber соответственно.
Затем оценивается произведение firstNumber и secondNumber, и результат сохраняется в переменной productOfTwoNumbers . Наконец, на экране отображается productOfTwoNumbers .
- Преобразование восьмеричного числа в десятичное и наоборот в C++
- Преобразование двоичного числа в восьмеричное и наоборот в C++
- Как перевернуть строку в C++
- Свежие записи
- Функция iscntrl() в C++
- Функция isdigit() в С++
- Функция isblank() в C++
- Функция isgraph() в C++
- Функция islower() в C++
Источник: calmsen.ru
Умножение двузначных чисел в столбик. Как умножать столбиком?
Как перемножить числа в списке?
пользователь вводит любые числа в строку которые добавляются в список сумму можно найти sum(spisok) а как найти произведение? можно вроде циклом через for а если например в одну строку как реализовать?
Отслеживать
user536011
задан 3 дек 2020 в 9:28
813 1 1 золотой знак 8 8 серебряных знаков 29 29 бронзовых знаков
9 ответов 9
Сортировка: Сброс на вариант по умолчанию
Раньше можно было использвать reduce(). Сейчас тоже можно, но эту функцию вынесли в отдельный модуль, так что строго говоря, считая импорт, получается две строчки:
import functools print (functools.reduce(lambda a, b : a * b, lst))
Отслеживать
Я бы добавил ещё и третью строчку, с импортом оператора умножения =) Upd: А, это есть ниже)
3 дек 2020 в 11:30
а почему сделали общим?
3 дек 2020 в 14:12
3 дек 2020 в 14:33
Все ответы здесь отстали от современности. Как насчет python-3.8 и выше?
math.prod
import math math.prod([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
Это пожалуй самое простое и стандартное решение ИМХО.
Отслеживать
5,345 1 1 золотой знак 14 14 серебряных знаков 33 33 бронзовых знака
ответ дан 21 дек 2020 в 11:51
USERNAME GOES HERE USERNAME GOES HERE
10.3k 21 21 золотой знак 25 25 серебряных знаков 53 53 бронзовых знака
from functools import reduce # Функция для свёрки последовательности from operator import mul # Функция, перемножающая 2 числа spisok = [16, 15, 9, 14, 13] # Исходный список result = reduce(mul, spisok) # / Список для свёртки # / Используем умножение # / Сворачиваем контейнер
Отслеживать
ответ дан 3 дек 2020 в 10:16
Mikhail Murugov Mikhail Murugov
5,345 1 1 золотой знак 14 14 серебряных знаков 33 33 бронзовых знака
Можно реализовать функцию mul
def mul(list_): n = 1 for el in list_: n *= el return n
либо так, с помощью lambda и рекурсии
mul = lambda arr:arr[0] * mul(arr[1:]) if arr else 1
Отслеживать
ответ дан 3 дек 2020 в 9:41
19.3k 5 5 золотых знаков 20 20 серебряных знаков 55 55 бронзовых знаков
тут пять строк, не считая той, где это будет вызываться. Про for автор даже в вопросе сам написал.
3 дек 2020 в 9:42
С импортом можно и так:
import numpy as np result = np.prod(np.array(mylist))
Отслеживать
ответ дан 3 дек 2020 в 9:51
Serg Bocharov Serg Bocharov
1,694 1 1 золотой знак 5 5 серебряных знаков 11 11 бронзовых знаков
Тяжеленный numpy для таких простейших задач.
3 дек 2020 в 10:17
3 дек 2020 в 10:43
let num = Number(prompt()) let lis = [] let mult = [] while (num) < num = Number(prompt()) lis.append(num) >var m = 1 for (let n = 0; n
Отслеживать
ответ дан 3 дек 2020 в 10:56
Alexander_Sky Alexander_Sky
87 8 8 бронзовых знаков
А где тут python?
3 дек 2020 в 10:58
а как это все записать в одну строчку?
3 дек 2020 в 11:01
3 дек 2020 в 11:01
)) правда, не обратил внимание, но это в целом не сложно должно быть переделать, если видишь на одном языке
3 дек 2020 в 11:02
3 дек 2020 в 11:17
Если очень захотеть, то можно и в одну строчку записать, но так конечно делать не стоит , например перемножить ‘2 3 4 5’ = 120
print(list(map(lambda s, t=[1]: [t.append(i*t[-1]) for i in map(int, s.split())][0] or t[-1], [‘2 3 4 5’]))[0]) # 120
Отслеживать
ответ дан 17 июн 2021 в 7:47
vadim vaduxa vadim vaduxa
8,897 14 14 серебряных знаков 24 24 бронзовых знака
Я приведу не очень практичное, но красивое решение в одну строку. Оно не использует eval , побочные эффекты при работе со списком или именованные функции.
Если именованные функции разрешены, то решение может выглядеть так:
def p(a): if a: return a[0] * p(a[1:]) return 1 print(p([1, 2, 3, 4, 5]))
Нам оно не подходит, так именованная функция требует минимум две строки для определения и вызова. Лямбду можно определить и вызвать в одной строке, но есть трудность в создании рекурсивной лямбды. Синтаксис Python разрешает такой трюк:
p = (lambda a: a[0] * p(a[1:]) if a else 1); print(p([1, 2, 3, 4, 5]))
Это именно трюк с глобальной переменной и двумя операторами в одной строке. А можно обойтись без глобальной переменной вообще. На первый взгляд этого не может быть так как имя нужно чтобы сделать рекурсивный вызов. Но функцию можно передать как аргумент в саму себя:
p = lambda f, a: a[0] * f(f, a[1:]) if a else 1 print(p(p, [1, 2, 3, 4, 5]))
Кажется мы ничего не выиграли: всё равно два оператора и глобальная переменная p . Однако сделан очень важный шаг — тело лямбды не использует глобальные переменные. Глобальная переменная используется в операторе print . Избавимся от неё:
p = lambda f, a: a[0] * f(f, a[1:]) if a else 1 y = lambda f, a: f(f, a) print(y(p, [1, 2, 3, 4, 5]))
Стало только хуже: три строки и две глобальные переменные. Зато каждая глобальная переменная задействована только один раз. Делаем подстановку:
print((lambda f, a: f(f, a))(lambda f, a: a[0] * f(f, a[1:]) if a else 1, [1, 2, 3, 4, 5]))
Читается тяжело, но задача решена в одну строку без глобальных имён и волшебных вызовов eval .
P.S. Читайте Fixed-point combinator чтобы узнать откуда пошло это решение.
P.P.S. Красивое утверждение: программу любой сложности можно записать в функциональном стиле не определив ни одной глобальной переменной, включая имена функций.
P.P.P.S. Не пытайтесь повторить это дома.
Источник: ru.stackoverflow.com