Обработка больших чисел в Юлии - PullRequest
0 голосов
/ 25 апреля 2018

В Python я могу сделать следующее, чтобы получить сумму всех цифр в N, где N=99999 ** 99999. Сумма может быть получена с помощью sum(map(int,str(N))).

Как мне найти сумму всех цифр в N с Юлией?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

У вас целочисленное переполнение.Попробуйте использовать BigInt s.

julia> N=digits(big(99999)^99999)
499995-element Array{Int64,1}:
 9
 9
 9
 9
 9
 8
 9
 9
 9
 9
 ⋮
 5
 0
 8
 2
 1
 8
 8
 7
 6
 3

Обратите внимание, что

julia> typemax(Int64)
9223372036854775807

, что слишком мало, но BigInt s произвольного размера.big(i) превращает i в большое (BigFloat, если это число с плавающей запятой, и BigInt, если это целое число).Джулия не по умолчанию использует числа большого или произвольного размера, так как они довольно медленные, но если вы их вызовете, то стабильность типов в большинстве отправлений будет распространяться на большой тип, поэтому big(i)^j в конечном итоге будет большим.

0 голосов
/ 25 апреля 2018

То, что вы ищете, это sum(digits(N)) (нужно любить Джулию за ее простоту!).

julia> N=99999^99999
7466109992980035935

julia> sum(digits(N))
95
...