标题:求20!。不明白为什么我的编译出来等于0
只看楼主
矿泉水的甜
Rank: 2
等 级:论坛游民
帖 子:34
专家分:13
注 册:2013-3-11
结帖率:50%
 问题点数:0 回复次数:6 
求20!。不明白为什么我的编译出来等于0
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
    int i=1,s=1;
    for(i=1;i<=20;i++)
    {
        s=s*i;
    }
    printf("s=%d",s);
}
搜索更多相关主题的帖子: void include choice 
2013-03-26 14:14
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:0 
可能是编译器的原因 20! = 2432902008176640000

int 装不下,会溢出的


[fly]存在即是合理[/fly]
2013-03-26 14:31
X1AO
Rank: 3Rank: 3
来 自:北京邮电大学
等 级:论坛游侠
威 望:1
帖 子:52
专家分:123
注 册:2013-3-6
得分:0 
程序代码:
#include <stdio.h>
void main()
{
    unsigned __int64 i=1,s=1;
    for(i=1;i<=20;i++)
    {
        s=s*i;
    }
   printf("%I64d",s);
}

用这个就好了,int太小了。

不要问我下课干什么,我陪瓜哥上厕所。
2013-03-26 14:42
tremere
Rank: 6Rank: 6
来 自:火星
等 级:侠之大者
帖 子:223
专家分:432
注 册:2013-3-11
得分:0 
你定义的s类型是int,int只是两个字节吧~
20的阶乘太大了。

极品菜鸟,来学习啦,啦啦啦啦啦啦啦。。。
2013-03-26 14:43
tremere
Rank: 6Rank: 6
来 自:火星
等 级:侠之大者
帖 子:223
专家分:432
注 册:2013-3-11
得分:0 
同意楼上的。

极品菜鸟,来学习啦,啦啦啦啦啦啦啦。。。
2013-03-26 14:44
致远
Rank: 1
来 自:江西南昌
等 级:新手上路
帖 子:4
专家分:7
注 册:2013-3-20
得分:0 
是值溢出来应定义为unsigned __int64 i=1,s=1;
2013-03-26 16:37
矿泉水的甜
Rank: 2
等 级:论坛游民
帖 子:34
专家分:13
注 册:2013-3-11
得分:0 
回复 6楼 致远
这种定义还没学过,第一次见,不会用啊。
2013-04-10 14:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-401956-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052242 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved