Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Golang阶乘显示错误的结果_Python_Go - Fatal编程技术网

Python Golang阶乘显示错误的结果

Python Golang阶乘显示错误的结果,python,go,Python,Go,我已将Python阶乘函数转换为golang程序。Python代码如下所示 def main(): n = input('Enter a number') result = factorial(n) print(result) def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) 而戈兰问题是这样的, package main im

我已将Python阶乘函数转换为golang程序。Python代码如下所示

def  main():
    n = input('Enter a number')
    result = factorial(n)
    print(result)

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)
而戈兰问题是这样的,

package main

import "fmt"

func main() {
    fmt.Println("Enter a Number ")
    var n int64
    var result int64
    fmt.Scan(&n)
    result = factorial(n)
    fmt.Println(result)
}

func factorial(n int64) int64 {
    //fmt.Println(n)
    if n == 0 {
        return int64(1)
    }
    //fmt.Println(n * factorial(n-1))
    return int64(n * factorial(n-1))

}
enKats-MacBook-Air:Factorials venkat$ python factorial.py
Enter a number5
120
VenKats-MacBook-Air:Factorials venkat$ go run factorial.go
Enter a Number 
5
120
VenKats-MacBook-Air:Factorials venkat$ python factorial.py
Enter a number99
933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000
VenKats-MacBook-Air:Factorials venkat$ go run factorial.go
Enter a Number 
99
0
VenKats-MacBook-Air:Factorials venkat$ 
对于较小的数字,两个程序的结果相同。但是对于较大的数字,Go输出为零。终端输出如下:

package main

import "fmt"

func main() {
    fmt.Println("Enter a Number ")
    var n int64
    var result int64
    fmt.Scan(&n)
    result = factorial(n)
    fmt.Println(result)
}

func factorial(n int64) int64 {
    //fmt.Println(n)
    if n == 0 {
        return int64(1)
    }
    //fmt.Println(n * factorial(n-1))
    return int64(n * factorial(n-1))

}
enKats-MacBook-Air:Factorials venkat$ python factorial.py
Enter a number5
120
VenKats-MacBook-Air:Factorials venkat$ go run factorial.go
Enter a Number 
5
120
VenKats-MacBook-Air:Factorials venkat$ python factorial.py
Enter a number99
933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000
VenKats-MacBook-Air:Factorials venkat$ go run factorial.go
Enter a Number 
99
0
VenKats-MacBook-Air:Factorials venkat$ 

大数字的围棋程序有什么问题?任何帮助都将不胜感激。

这是溢出的结果。普通Python
int
s的大小是任意的。但如果使用大小的整数,例如使用
numpy
的64位整数,则会遇到相同的问题:

>>> import numpy as np
>>> def factorial(n):
...   if n == 0:
...     return np.int64(1)
...   else:
...     return n * factorial(n - np.int64(1))
...
>>> factorial(99)
__main__:5: RuntimeWarning: overflow encountered in long_scalars
0
我不是golang程序员,但通过快速搜索,可以从标准库中获得以下信息:


这是溢出的结果。普通Python
int
s的大小是任意的。但如果使用大小的整数,例如使用
numpy
的64位整数,则会遇到相同的问题:

>>> import numpy as np
>>> def factorial(n):
...   if n == 0:
...     return np.int64(1)
...   else:
...     return n * factorial(n - np.int64(1))
...
>>> factorial(99)
__main__:5: RuntimeWarning: overflow encountered in long_scalars
0
我不是golang程序员,但通过快速搜索,可以从标准库中获得以下信息:


99阶乘不适用于64位整数。哪个大于int64的Golang数据类型适用于此类别。那么我应该使用float吗?这取决于你想对输出做什么,不是吗?目标只是打印阶乘结果。因此,即使使用float或decimal,也会出现一个问题,比如如何删除小数部分。因为返回int将不起作用,因为结果将是巨大的。我以前从未使用过Go,但是我用过Google:99阶乘不能放在64位整数中。哪个大于int64的Golang数据类型可以放在这个类别中。那么我应该使用float吗?这取决于你想对输出做什么,不是吗?目标只是打印阶乘结果。因此,即使使用float或decimal,也会出现一个问题,比如如何删除小数部分。因为返回int将不起作用,因为结果将是巨大的。我以前从未使用过Go,但我用过谷歌: