鱼C论坛

 找回密码
 立即注册
查看: 2120|回复: 8

spoj上阶乘的问题

[复制链接]
发表于 2017-1-12 03:26:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
http://www.spoj.com/problems/FCTRL2/
地址是原题
下面有截图
意思就是先要输入一个数字t,这个t代表你下面将要输入t个需要算阶乘的数字,然后输入n个数,输出是这n个数的阶乘。 t 和 n 都大于等于1 ,小于等于100.
我的代码如下,但是无法运行。

def factorial(n):
    result = n
    for i in range(1,n):
        result *=i
    return result

t = int(input())
number = int(input().split('\n'))
result = factoial(number)
print('%d \n'% result)

原因是:
= RESTART: C:/Users/ssy55/AppData/Local/Programs/Python/Python35/jiecheng.py =
2
3
Traceback (most recent call last):
  File "C:/Users/ssy55/AppData/Local/Programs/Python/Python35/jiecheng.py", line 8, in <module>
    number = int(input().split('\n'))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

不知道怎么去修改。。
递归.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-1-12 08:50:16 | 显示全部楼层
  1. import math
  2. t = int(input())
  3. list1 = [int(input()) for i in range(t)]
  4. for i in list1:
  5.     print(math.factorial(i))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-12 09:33:48 | 显示全部楼层
可以利用math库的factorial()算阶乘,见版主解答。
如果要自己写阶乘函数:
  1. def factorial(n):
  2.     return n*factorial(n-1) if n>1 else 1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-12 10:28:55 | 显示全部楼层
阶乘最好使用递归把
你的报错是说int()强制转化的类型不能是列表,但是你输入了list类型,所以无法强制转化
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-12 11:18:20 | 显示全部楼层
蛋炒饭妖妖 发表于 2017-1-12 10:28
阶乘最好使用递归把
你的报错是说int()强制转化的类型不能是列表,但是你输入了list类型,所以无法强制 ...
  1. def factorial(n):
  2.     return n*factorial(n-1) if n>1 else 1
复制代码

这个写法就是递归,不过我总不太喜欢递归算法,感觉效率太低,个人感觉能用循环解决的尽量避免递归
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-12 15:35:11 | 显示全部楼层
jerryxjr1220 发表于 2017-1-12 11:18
这个写法就是递归,不过我总不太喜欢递归算法,感觉效率太低,个人感觉能用循环解决的尽量避免递归

恩恩,我是给楼主说推荐递归。,嘻嘻

我个人觉得各有各的好,不过就像你说的,小程序在python里循环也非常好用的;不过感觉如果稍微复杂些的话递归还是超级棒的~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-12 16:40:23 | 显示全部楼层
蛋炒饭妖妖 发表于 2017-1-12 10:28
阶乘最好使用递归把
你的报错是说int()强制转化的类型不能是列表,但是你输入了list类型,所以无法强制 ...

我其实也发现了,用别的方法还说str 和 int 不能相加,我也是才开始学这个。谢谢你了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-12 16:40:55 | 显示全部楼层

谢谢版主的解答。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-12 16:41:28 | 显示全部楼层
jerryxjr1220 发表于 2017-1-12 09:33
可以利用math库的factorial()算阶乘,见版主解答。
如果要自己写阶乘函数:

谢谢你,我还不太会用递归。正在慢慢摸索中。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-24 23:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表