为了账号安全,请及时绑定邮箱和手机立即绑定

代码如下,到输入13时就不对了,应该是差范围了,才学没多久不知道该怎么办?

代码如下,到输入13时就不对了,应该是差范围了,才学没多久不知道该怎么办?

C
繁星淼淼 2022-04-21 17:11:56
(计算1!+2!+3!+。。。。+N!)#include <stdio.h>void main(){long int i=0,n,x=1,y=1,z=1;while(1){scanf("%d",&n);if(n<=20){for(i=1;z<=n;i++,z++){i=x*z;if(i>1){y=i+y;}x=i ;}if(n==1)printf("1\n");elseprintf("%d\n",y);}}}
查看完整描述

3 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

long int实际上跟int一样,也只有4个字节。
解决办法是用long long。
修改三个地方:

long int i=0,n,x=1,y=1,z=1;
修改为long long i=0,n,x=1,y=1,z=1;
scanf("%d",&n);修改为scanf("%lld",&n);
printf("%d\n",y);修改为printf("%lld\n",y);
注意这里的ll是jkl里的小写l。
我用的是Linux上的CodeBlocks,如果是Windows,把%lld换成%I64d,注意前面的字母是HIJK里的大写I。

查看完整回答
反对 回复 2022-04-24
?
HUH函数

TA贡献1836条经验 获得超4个赞

修改代码如下,将long int 改为double就可以了,你试试

#include <stdio.h>
void main()
{
double i=0,n,x=1,y=1,z=1;
while(1)
{scanf("%lf",&n);
if(n<=20)
{
for(i=1;z<=n;i++,z++)
{
i=x*z;
if(i>1)
{
y=i+y;
}
x=i ;
}
if(n==1)
printf("1\n");
else
printf("%lf\n",y);
}}
}




查看完整回答
反对 回复 2022-04-24
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

c语言的已有的简单类型中没有一个放得下的。
如果你想计算,就需要自己想办法,例如 用一个大数组来存储计算结果的每一位等等

查看完整回答
反对 回复 2022-04-24
  • 3 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信