一个double 类型的函数,给他一个int类型的值作为返回值,会出现什么问题鸭??

好了么 2020-05-08 03:02:47


我的代码:
#include <stdio.h>
double fact(int num)
{
double add=1;
while(num != 0) {
add*=num;
num-=1;
}
return add;
}

int main(int argc,char const *argv[])
{
int m,n;
scanf("%d %d",&m,&n);

double result=0;
result = fact(n)/(fact(m)*fact(n-m));

printf("result = %.0f",result);
return 0;
}

这样写的话,提交后没点问题,但是当我把fact()函数中的add的类型换成 int 的话,就会出现下图所示的错误:


假设返回值这里的类型出错的话,不是应该所有的测试点都会报错吗??为什么偏偏是 m == n/2 这个点??awsl,救救孩子!!
...全文
1359 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
好了么 2020-05-09
  • 打赏
  • 举报
回复
我把add类型改成 int 后,return 的时候函数自动将其转换成了double 类型,而 小 转换成 大的是不会溢出的; 但是算阶乘的时候,由于 int 的范围比 double的小,所以当数据很大的时候就会产生溢出,这时候就会出错。 我还特意将 add 的类型定义为 long long 试了一下(完全正确!!): 现在来看这个题目:为什么只有测试点1会出错呢??可能是这个点测试的数据比较大,其他的比较小。(我只能这么理解了
自信男孩 2020-05-08
  • 打赏
  • 举报
回复
等价这样:int a; a = 1.1;
相当于把一个浮点数赋值给一个int类型。所以,可以自己试一下int a = 110.323234;看看a输出的结果是多少
nice_cxf 2020-05-08
  • 打赏
  • 举报
回复
int范围不够吧,这个应该012都会出错?3固定=1,应该不会错
六道佩恩 2020-05-08
  • 打赏
  • 举报
回复
就类型转换啊 假如你是return a 返回值标明的是double 那么你可以理解为会有这样一步操作 return (double)(a) 即最后返回一个转换后的double变量

70,017

社区成员

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

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