| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 335 人关注过本帖
标题:n!的问题
只看楼主 加入收藏
snowmark
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-17
结帖率:0
收藏
 问题点数:0 回复次数:5 
n!的问题
#include <stdio.h>
void main()
{
    printf("\t\t\t\t该程序计算n!的数值.\n");
    int s,a,n;
    s=1;
    a=2;
    printf("please input n:");
    scanf("%d",&n);
    do{
        s=s*a;
        a++;
    }while(a<=n);
    printf("%d!=%d\n",n,s);
}

为什么计算量少点 给出的答案都是对的,一到 20!的时候 答案就是负的。。  再多一点就直接显示0 了
搜索更多相关主题的帖子: please include 
2010-07-17 23:05
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
超出整型能表示的范围,用long会好一点吧
2010-07-17 23:17
snowmark
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-17
收藏
得分:0 
把 int 改成 long 还是同样的情况
2010-07-17 23:20
flyingcat
Rank: 4
来 自:HDU
等 级:业余侠客
威 望:2
帖 子:55
专家分:230
注 册:2010-7-18
收藏
得分:0 
//是个大数问题,你20!太大了
//这里有个阶乘模板,输入一个数,输出该数的阶乘,对应一题:http://acm.hdu.
//下面的程序计算到10000!  如果还要大点,把数组拉大就行,不过花费的时间会更多
#include <stdio.h>
#include <math.h>

int factorial(int n)
{
    long a[10000];
    int i,j,c,m=0,w;
    a[0]=1;
    for(i=1;i<=n;i++)
    {
        c=0;
        for(j=0;j<=m;j++)
        {
            a[j]=a[j]*i+c;
            c=a[j]/10000;
            a[j]=a[j]%10000;
        }
        if(c>0)
        {
            m++;
            a[m]=c;
        }
    }
    w=m*4+(int)log10(a[m])+1;
    printf("%ld",a[m]);
    for(i=m-1;i>=0;i--)
        printf("%4.4ld",a[i]);
    printf("\n");
    return w;
}

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
        factorial(n);
    return 0;
}
2010-07-18 09:18
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
以下是引用snowmark在2010-7-17 23:20:03的发言:

把 int 改成 long 还是同样的情况
数字太大了,就会引起问题。
可以这样修改试试

    printf("\t\t\t\t该程序计算n!的数值.\n");
    int a,n;
    double s = 1;//把这里改成double
    a=2;
    printf("please input n:");
    scanf("%d",&n);
    do{
        s=s*a;
        a++;
    }while(a<=n);
    printf("%d!=%.0lf\n",n,s);//输出也做相应修改



[ 本帖最后由 zisefengye 于 2010-7-18 13:31 编辑 ]
2010-07-18 10:19
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
二十太大了,程序无误,你用你家的计算器算算20的阶乘………………

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-18 13:11
快速回复:n!的问题
数据加载中...
 
   



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

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