| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1330 人关注过本帖
标题:为什么我写的 阶乘只能计算到33啊
只看楼主 加入收藏
jay416118
Rank: 2
等 级:论坛游民
帖 子:18
专家分:19
注 册:2010-11-9
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:7 
为什么我写的 阶乘只能计算到33啊
程序代码:
int main()
{
    int m,n,t;
    m=1;
    printf("输入一个数计算其阶乘:\n");
    scanf("%d",&t);
    for(n=1;n<=t;n++)
        m=m*n;
    printf("阶乘:%d\n",m);
}

到34就计算为0
搜索更多相关主题的帖子: 阶乘 
2010-11-30 23:00
cacker
该用户已被删除
收藏
得分:2 
提示: 作者被禁止或删除 内容自动屏蔽
2010-11-30 23:02
jay416118
Rank: 2
等 级:论坛游民
帖 子:18
专家分:19
注 册:2010-11-9
收藏
得分:0 
回复 楼主 jay416118
版主 帮我改一下好吗
2010-11-30 23:28
liquan1989
Rank: 2
等 级:论坛游民
帖 子:27
专家分:12
注 册:2010-1-18
收藏
得分:2 
数据类型不对
int main(void)
{
    float  m,t;
    int n;
    m=1;
    printf("输入一个数计算其阶乘:\n");
    scanf("%f",&t);
    for(n=1;n<=t;n++)
        m=m*n;
    printf("阶乘:%f\n",m);
return 0;
}


换成浮点型的 即可·
2010-12-01 00:27
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:2 
显然溢出,就是浮点数也有限制的

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-12-01 00:35
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:2 
回复 楼主 jay416118
给你一个。并非原创的。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

short mul(short a[],short d,short x)
{
    long i,y = 0; 

    for(i = 0;i < d; i++)
    {
        y += (long)a[i] * (long)x;
        a[i] = (short)(y % 10000);
        y /= 10000;
    } 

    a[d] = (short)y; 

    return d+!!y;   
} 

int main()
{
    time_t begin ,end;

    while(1)
    {

        time(&begin);

        long s;
        short *a,i,j,n,ws = 1;
   
        printf("N=");
        scanf("%d",&n);
   
        #define Pi 3.14159265358979323846L    //这个语句什么意思?
   
        s=(long)((log(2*Pi*n)/2+n*(log(n)-1))/log(10)+1);
   
        a=(short*)malloc((s/4+2)*sizeof(short));    //申请空间

        *a=1; 

        for(i=2;i<=n;i++)
            ws=mul(a,ws,i);        //函数调用了

        printf("%d!=%d",n,a[ws-1]); 

        for(j=ws-2;j>=0;j--)
            printf("%04d",a[j]);
   
        printf("\n");
   
        free(a);
   
        time(&end);
        printf("\nRunning time is %lf\n",difftime(end,begin));

        puts("continue(y/n)?");
        getchar();
        char sign = getchar();
        if('y' == sign || 'Y' == sign)
            continue;
        else
            break;
        }
    system("pause");

    return 0;

} 




南国利剑
2010-12-01 01:21
xx123321
Rank: 1
等 级:新手上路
帖 子:7
专家分:7
注 册:2010-12-1
收藏
得分:2 
樓主試試用double吧~

[ 本帖最后由 xx123321 于 2010-12-1 08:08 编辑 ]
2010-12-01 08:06
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:2 
用double的啊

我是初学者
2010-12-01 14:59
快速回复:为什么我写的 阶乘只能计算到33啊
数据加载中...
 
   



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

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