Чтобы напечатать значение string
, просто передайте его как есть fmt.Println()
:
str := fact.String()
fmt.Println(str)
Также обратите внимание, что вам не нужно вызывать его String()
метод, пакет fmt
сделает это за вас.Но если вы просто передадите ему fact
, потому что Int.String()
имеет получатель указателя, поэтому вам нужно передать указатель на него:
fmt.Println(&fact)
Или объявить и использовать *big.Int
в первую очередь, а затем вы можете передать fact
просто для печати:
var fact = new(big.Int)
fact.MulRange(1, 100)
fmt.Println(fact)
На самом деле, поскольку все методы big.Int
имеют получатели указателей, вы всегда должныобъявляйте и используйте указатели big.Int
, чтобы избежать неожиданностей.
Примечание:
Ваш исходный код не печатает то, что вы хотите, потому что for range
в строке превышаетего руны (символы), а rune
является псевдонимом для int32
, поэтому символы результата будут напечатаны как отдельные числа без пробелов между ними (поскольку вы печатаете каждый с вызовом fmt.Print()
).
По этой же причине для вычисления суммы цифр необходимо преобразовать руны в числовое значение цифр, которые они представляют.Для этого вы можете просто использовать digit - '0'
:
str := fact.String()
sum := 0
for _, val := range str {
sum += int(val - '0')
}
fmt.Println(sum)
Это напечатает (например, на Go Playground ):
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
648