n!

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Daz
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 27.12.2003 (Сб) 23:22

n!

Сообщение Daz » 19.11.2005 (Сб) 12:28

Как заставить программу рассчитать n!>170 ?
Автор благодарит алфавит за любезно предоставленные буквы.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 19.11.2005 (Сб) 12:43

Поясни, что есть "n!"?

Павлуша
Не годный к строевой
Не годный к строевой
Аватара пользователя
 
Сообщения: 884
Зарегистрирован: 01.01.2005 (Сб) 19:31
Откуда: Смотря кто?

Сообщение Павлуша » 19.11.2005 (Сб) 12:45

n! - это n факториал.
надо высчитать такое n при котором ее факториал будет больше 170.
так я понял?
Пошли все на фиг, я фея! :flower:

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 21.11.2005 (Пн) 18:42

может все-таки факториал для числ большего 170?

Если имеется ввиду именно это, то вычислять его так же как и для меньших чисел, но число получается больше чем вмещает в себя тип Double и произойдет переполнение
Весь мир матрица, а мы в нем потоки байтов!

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 21.11.2005 (Пн) 18:50

Писать эмулятор арифметического сопроцессора :lol:
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 21.11.2005 (Пн) 19:54

http://algolist.manual.ru/ ничего не говорит?

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 21.11.2005 (Пн) 22:24

Писать длинную арифметику (особенно деление и умножение) очень противное занятие... Я бы попытался обойтись без этого.

CORBA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 22.11.2003 (Сб) 13:41
Откуда: Ukraine-Crimea-Feodosia

Сообщение CORBA » 21.11.2005 (Пн) 22:31

ну, а как работают физики и математики с большими числами? --
представляют их в следующей форме, например 1,232423423423e+10
У каждой сложной задачи есть множество простых для понимания, но неправильных решений.

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 21.11.2005 (Пн) 22:42

Вспомним сколь знаков после запятой держит дабл и решим так не делать. Лишние 10-30 порядков не особо добавят (ну до 175-180 можно будет считать) А вот точность резко упадет.

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 22.11.2005 (Вт) 0:44

есть способ, но возможно он будет очень медленным. создать калькулятор для string-чисел и работать с ними. медленно, но чтож поделаешь... или склеивать несколько даблов и использовать их как один.
ХЎ

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 22.11.2005 (Вт) 1:43

У меня когда-то была идея создать класс, для работы с большими числами. Только в ВБ 6.0 нет перегрузки операторов, и я эту работу закинул.
Писать длинную арифметику (особенно деление и умножение) очень противное занятие... Я бы попытался обойтись без этого.

Умножение не так уж сложно, с делением больше проблем, но так как нужно только умножение, то можна чуть поработать.
الفيجوال بيسك الرابح

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 15.12.2005 (Чт) 5:38

Ежели не нужно знать каждый знак, то прокатит такой метод:
Код: Выделить всё
Const ln10 = 2.30258509299405
Private Sub Main()
Dim n As Long, i As Long, m As Double, e As Long, t As Byte
n = CLng(InputBox("n:"))
m = 1
e = 0
Do
m = m * n
t = Int(Log(m) / ln10)
e = e + t
For i = 1 To t
    m = m / 10
Next i
n = n - 1
Loop Until n = 1
MsgBox Str(m) & " e" & Str(e), vbOKOnly + vbInformation
End Sub
Листинги не горят!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 92

    TopList