PTA c语言程序设计 2-18

houdiniZ 2018-07-28 11:58:14


PTA中有题目如上,我的代码是这样的,但是系统判定当m==n/2时答案错误:


在论坛上看到这个答案,输入后系统提示正确,我看了下只有主调函数中多了一个for循环这个区别,但这个循环看上去是没用的,求哪位大神解释下,谢谢。
...全文
402 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
houdiniZ 2018-07-30
  • 打赏
  • 举报
回复
感谢各位的回复,我明白了,看来写码要注意的细节真是多。心里想着一切ok的代码,执行起来不知道会出什么幺蛾子。
zangfong 2018-07-28
  • 打赏
  • 举报
回复
引用 3 楼 zangfong 的回复:
后面代码main函数中的for循环,除了费时,的确没什么用。问题是出在你的double fact(int n)函数的定义。题目之所以提醒你n是int,但是函数返回类型是double的,就是说明在计算n!的过程中,int类型会溢出。试了一下,当a > 12时,阶乘的结果就溢出了。所以你需要跟参考代码一样,把你的a定义成double,才不会出现溢出的情况
double fact(int n)
{
double a = 1;
int i;
for(i = n; i > 1; i--)
a = a * i;
}

忘了一个return a;
zangfong 2018-07-28
  • 打赏
  • 举报
回复
后面代码main函数中的for循环,除了费时,的确没什么用。问题是出在你的double fact(int n)函数的定义。题目之所以提醒你n是int,但是函数返回类型是double的,就是说明在计算n!的过程中,int类型会溢出。试了一下,当a > 12时,阶乘的结果就溢出了。所以你需要跟参考代码一样,把你的a定义成double,才不会出现溢出的情况
double fact(int n)
{
double a = 1;
int i;
for(i = n; i > 1; i--)
a = a * i;
}
Isnis-fallen 2018-07-28
  • 打赏
  • 举报
回复
你可以把 double product 改成 int 试试 你for循环应该是 i>=1 吧
kfyniriu1 2018-07-28
  • 打赏
  • 举报
回复
a的类型是double,我也没看出来为什么需要在主函数加一段循环

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧