#include
void main()
{
int m,n,z;
double sum=0;
for(m=1;m<=20;m++)
{
for(n=1,z=1;n<=m;n++)
{
z*=n;
}
sum+=z;
}
printf("%lf\n",sum);
}
求问C中1到20的阶乘之和这么求有哪里错了吗?
一直求不对,希望有大佬帮忙解答。
1条回答 默认 最新
- 正在学C++ 2021-04-17 12:19关注
因为int最大表示2^31-1,也就是2147483647(21亿)。但是12!是4亿多,13!是62亿多。20!有19位
你用z(int)来存放每个数的阶乘,到了13!之后就出错了,z就不是正确的阶乘结果。导致你的sum出错。
你可以把所有变量全用long long int,这个在64位机上可以表示8个字节,可以达到19位,刚好可以记录20!,不可以记录21!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 划分vlan后不通了
- ¥15 GDI处理通道视频时总是带有白色锯齿
- ¥20 用雷电模拟器安装百达屋apk一直闪退
- ¥15 算能科技20240506咨询(拒绝大模型回答)
- ¥15 自适应 AR 模型 参数估计Matlab程序
- ¥100 角动量包络面如何用MATLAB绘制
- ¥15 merge函数占用内存过大
- ¥15 Revit2020下载问题
- ¥15 使用EMD去噪处理RML2016数据集时候的原理
- ¥15 神经网络预测均方误差很小 但是图像上看着差别太大