
#include<stdio.h>
void qiuhe()
{ int i,n,shang,xia;
double sum,dan;shang=1;xia=1;sum=1;scanf("%d",&n);for(i=1;i<n+1;i++){shang*=i;xia*=(i2+1);
dan=shang1.0/xia;
sum+=dan; }
printf("%.10lf",sum);
}
int main(void)
{
qiuhe();
return 0;
}然后我吧shang xia改成double 就过了是什么原因?求详细解答,谢谢
不是double类型在计算除法的时候可能会造成数据丢失比如3/2不是double输入1

1️⃣首先看到这个分数,就应该想到要用double类型来实现2️⃣然后:我把shang xia改成double 就过了是什么原因?数据精度问题,是因为你分子分母如果是整数,进行相除的时候会默认向下取整,也就是的到的值就是整数,不准确。希望对题主有所帮助!可以的话,帮忙点个采纳!
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>>
https://vip.csdn.net/askvip?utm_source=1146287632