Автор Тема: [Все] Первая цифра числа  (Прочитано 17436 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4016
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
[Все] Первая цифра числа
« Создано: Март 08, 2012, 09:24:41 »
Необходимо написать наибыстрейшую программу, которая определяет первую цифру слева (цифра наивысшего разряда) факториала любого числа в десятичном представлении. Например,
Число | Факториал | Первая цифра
------|-----------|-------------
1     | 1         | 1
2     | 2         | 2
3     | 6         | 6
4     | 24        | 2
5     | 120       | 1
6     | 720       | 7
7     | 5040      | 5
8     | 40320     | 4
9     | 362880    | 3
10    | 3628800   | 3
Программа должна принимать на входе любое число, превышающее 100, считать его факториал и выдавать одну цифру от 1 - 9 которая является первой слева. Правильность ответа можете проверить на сайте Калькулятор Факториалов.

Бонусная задача: Определить первую цифру от числа 5001!

Русское сообщество AutoIt

[Все] Первая цифра числа
« Отправлен: Март 08, 2012, 09:24:41 »

Оффлайн Viktor1703 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1512
  • Репутация: 405
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: [Все] Первая цифра числа
« Ответ #1, Отправлен: Март 08, 2012, 09:49:24 »
Не понял, вычислять факториал нужно саамому? если нет то:

Код: AutoIt [Выделить]
Dim $aValue[10] = [1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]

For $i = 0 To Ubound($aValue) - 1
    ConsoleWrite(Left($aValue[$i], 100) & @CRLF)
Next

Func Left($aNumber, $iLimit)
    If $aNumber >= $iLimit And $aNumber <= 5000 Then
        If Not IsFloat($aNumber / 2) Then
            Return StringLeft($aNumber, 1)
        Else
            Return $aNumber
        EndIf
    EndIf
EndFunc


Цитировать
Бонусная задача: Определить первую цифру от числа 5001!

Равно 0 (нулю)
« Последнее редактирование: Март 08, 2012, 09:55:51 от Viktor1703 »

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4016

  • Автор темы
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Все] Первая цифра числа
« Ответ #2, Отправлен: Март 08, 2012, 09:56:13 »
Viktor1703
моя вина, не совсем внятно изложил. поправил сообщение.
да, факториалы надо самому считать

Viktor1703  [?]
Цитировать
Равно 0 (нулю)
первая цифра слева. как в примере

Оффлайн Viktor1703 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1512
  • Репутация: 405
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: [Все] Первая цифра числа
« Ответ #3, Отправлен: Март 08, 2012, 10:36:13 »
Код: AutoIt [Выделить]
For $i = 1 To 200
    If $i >= 100 Then
        ConsoleWrite(Factorial($i) & @CRLF)
    EndIf  
Next   

Func Factorial($aNumber)
    Local $aRet
    If ($aNumber = 0) Or ($aNumber = 1) Then Return 1  
    For $i = 1 to $aNumber
        $aRet += Log($i) / Log(10)
    Next
    If $aNumber <= 170 Then $aRet = 10 ^ $aRet
    Return StringLeft($aRet, 1)
EndFunc
 


Цитировать
Бонусная задача: Определить первую цифру от числа 5001!

Равно 1, правдо результата ждал прилично  :)

Русское сообщество AutoIt

Re: [Все] Первая цифра числа
« Ответ #3 Отправлен: Март 08, 2012, 10:36:13 »

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4016

  • Автор темы
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Все] Первая цифра числа
« Ответ #4, Отправлен: Март 08, 2012, 10:50:44 »
Viktor1703
попахивает моим давнишним кодом  ;D
правда реализован неправильно.
Viktor1703  [?]
Цитировать
Равно 1, правдо результата ждал прилично
ответ неверен. я думаю, в следствие вышесказанного.

Оффлайн Viktor1703 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1512
  • Репутация: 405
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: [Все] Первая цифра числа
« Ответ #5, Отправлен: Март 08, 2012, 10:55:38 »
Честно говоря не видел Вашего кода  :blink:, да и в математике я не очень, буду пробывать ещё, это же не конец света  :)

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7789
  • Репутация: 2313
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Все] Первая цифра числа
« Ответ #6, Отправлен: Март 08, 2012, 10:58:55 »
OffTopicViktor1703,
Рекомендации по написанию скриптов
Дело, конечно, Ваше, как называть переменные, но...

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4016

  • Автор темы
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Все] Первая цифра числа
« Ответ #7, Отправлен: Март 08, 2012, 11:06:49 »
Viktor1703  [?]
Цитировать
Честно говоря не видел Вашего кода
теперь уже никто не увидит  :whistle: ну, акромя модераторов.
Цитировать
буду пробывать ещё, это же не конец света
конечно нет  :ok:

Русское сообщество AutoIt

Re: [Все] Первая цифра числа
« Ответ #7 Отправлен: Март 08, 2012, 11:06:49 »

Оффлайн Zaramot [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1160
  • Репутация: 653
  • Пол: Мужской
  • I ♥ AutoIt
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: [Все] Первая цифра числа
« Ответ #8, Отправлен: Март 08, 2012, 12:53:49 »
Код: AutoIt [Выделить]
Dim $Array[10] = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

For $x = 0 To UBound($Array) - 1
    ConsoleWrite(StringMid(Factorial($Array[$x]), 1, 1) & @CRLF)
Next

Func Factorial($mfFactor)
    If Not (StringIsInt($mfFactor)) OR (Int($mfFactor) < 0) Then
        SetError(1)
        Return 0
    Else
        $mfFactor = Int($mfFactor)
    EndIf
    If $mfFactor = 0 Then Return 1
    Dim $return = 1
    For $i = $mfFactor to 1 Step - 1
        $return *= $i
    Next
    Return $return
EndFunc


Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4016

  • Автор темы
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Все] Первая цифра числа
« Ответ #9, Отправлен: Март 08, 2012, 12:54:59 »
Zaramot
входное число должно быть больше 100, в идеале (чтобы решить бонусную задачу) за 5000


Добавлено: Март 08, 2012, 13:08:04
небольшое пояснение, самое главное - это первая цифра факториала числа, то есть результат. как вы его добудете абсолютно не важно. самое главное - чтобы процес расчета был реализован в виде кода, а не откуда-то с неба взят
« Последнее редактирование: Март 08, 2012, 13:08:04 от Kaster, Причина: Объединение сообщений »

Оффлайн Zaramot [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1160
  • Репутация: 653
  • Пол: Мужской
  • I ♥ AutoIt
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: [Все] Первая цифра числа
« Ответ #10, Отправлен: Март 08, 2012, 13:41:52 »
Код: AutoIt [Выделить]
#include <MathEx.au3>

Dim $Array[10] = [121, 157, 189, 210, 250, 290, 310, 347, 377, 400]

For $x = 0 To UBound($Array) - 1
    ConsoleWrite(StringMid(_Factorial($Array[$x]), 2, 1) & @CRLF)
Next


Оффлайн XpycT [?]

  • Скриптер
  • ****
  • Сообщений: 380
  • Репутация: 131
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Все] Первая цифра числа
« Ответ #11, Отправлен: Март 08, 2012, 13:53:33 »
Код: AutoIt [Выделить]
#include "BigNum.au3"
$iT = TimerInit()
$iF = 1
$iN = 5001
If $iN < 0 Then Exit 99 * 0 + ConsoleWrite("Число : " & $iN & @CR & "Факториал : 0" & @CR & "Первая Цифра : 0" & @CR & "Время : " & TimerDiff($iT) & @CR)
If $iN = 0 Then Exit 99 * 0 + ConsoleWrite("Число : " & $iN & @CR & "Факториал : 1" & @CR & "Первая Цифра : 1" & @CR & "Время : " & TimerDiff($iT) & @CR)

For $i = 1 To $iN
    $iF = _BigNum_Mul($iF, $i)
Next
ConsoleWrite("Число : " & $iN & @CR & "Факториал : " & $iF & @CR & "Первая Цифра : " & StringLeft($iF, 1) & @CR & "Время : " & TimerDiff($iT) & @CR)


Первая Цифра факториал от числа 5001 : 2

BigNum.au3


Рожденный летать, висеть не может.

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

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4016

  • Автор темы
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Все] Первая цифра числа
« Ответ #12, Отправлен: Март 08, 2012, 13:54:37 »
Zaramot
помоему,
Time spent for 100! - 21.471751018635 secsне очень хороший результат  ;D


Добавлено: Март 08, 2012, 14:03:59
XpycT
Уже лучше, но опять же 4 сек :)
Number : 1000
First digit : 4
Time : 4042.04109740204

Чтобы было на что ориентироваться, приведу время выполнения моего варианта
Time spent for first digit of my method for 5001 - 0.0160525988638221 secs

Добавлено: Март 08, 2012, 14:05:03
XpycT  [?]
Цитировать
Первая Цифра факториал от числа 5001 : 2
ответ верный, но я на своей машине, к сожалению не дождался результата. в любом случае, как наибыстрейший твой метод не пойдет


Добавлено: Март 08, 2012, 14:10:38
таки дождался
Time : 155930.178835578
« Последнее редактирование: Март 08, 2012, 14:10:38 от Kaster, Причина: Объединение сообщений »

Оффлайн AZJIO [?]

  • VIP
  • *
  • Сообщений: 2706
  • Репутация: 1136
    • мой сайт
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: [Все] Первая цифра числа
« Ответ #13, Отправлен: Март 08, 2012, 14:52:04 »
XpycT
Если уж использовать BigNum.au3, то там есть _BigNum_Parse. Примерно так:

Код: AutoIt [Выделить]
#include "BigNum.au3"
MsgBox(0, '', _Fl(100))

Func _Fl($n)
    $r='1'
    For $i = 2 To $n
        $r &= '*'&$i
    Next
    Return _BigNum_Parse($r)
EndFunc


Оффлайн C2H5OH [?]

  • Знаю я тут одно место с офигенными циркулями...
  • AutoIt Гуру
  • *****
  • Сообщений: 1473
  • Репутация: 330
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: [Все] Первая цифра числа
« Ответ #14, Отправлен: Март 08, 2012, 15:12:51 »
Код: AutoIt [Выделить]
#include <Date.au3>

ConsoleWrite(" старт " & _NowTime() & @CRLF )
ConsoleWrite("первая цифра = " & StringLeft(_eshe_parocku(5001),1) & @CRLF )
ConsoleWrite(" стоп " & _NowTime() & @CRLF )

Func _eshe_parocku($aNumber)
    Local $aRet = 1
    For $i = 1 to $aNumber
        $aRet *= $i
        If $aRet > 10000000 Then $aRet = Floor($aRet / 1000)
    Next
    Return $aRet
EndFunc

Рано или поздно все станет понятно, все станет на свои места и выстроится в единую красивую схему, как кружева. Станет понятно, зачем все было нужно, потому что все будет правильно.

Русское сообщество AutoIt

Re: [Все] Первая цифра числа
« Ответ #14 Отправлен: Март 08, 2012, 15:12:51 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
12 Ответов
4259 Просмотров
Последний ответ Февраль 01, 2012, 22:54:43
от Viktor1703
12 Ответов
4537 Просмотров
Последний ответ Апрель 15, 2012, 11:37:00
от MyBB
3 Ответов
2122 Просмотров
Последний ответ Июнь 13, 2012, 19:03:01
от Yashied
19 Ответов
5951 Просмотров
Последний ответ Июль 03, 2012, 20:07:21
от Garrett
10 Ответов
4266 Просмотров
Последний ответ Сентябрь 28, 2012, 18:43:22
от ArtInt
2 Ответов
2096 Просмотров
Последний ответ Октябрь 21, 2013, 23:53:57
от britanec74
1 Ответов
1404 Просмотров
Последний ответ Март 27, 2014, 17:50:40
от Garrett
13 Ответов
2520 Просмотров
Последний ответ Март 27, 2014, 23:04:36
от alex33
2 Ответов
1453 Просмотров
Последний ответ Май 06, 2014, 21:07:51
от damien2008
0 Ответов
5259 Просмотров
Последний ответ Март 09, 2015, 19:52:38
от goodmax