| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 927 人关注过本帖
标题:为什么N在10以下就OK,超过就不正确了呢
只看楼主 加入收藏
fishlover
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-5-10
收藏
 问题点数:0 回复次数:8 
为什么N在10以下就OK,超过就不正确了呢
#include<stdio.h>
void main()
{
    long int s=1,n;
    printf("in put the number:");
    scanf("%ld",&n);
    for(long int i=1;i<=n;i++)
        s=s*i;
    printf("the answer is %ld\n",s);
}
搜索更多相关主题的帖子: int long void number main 
2008-03-17 21:21
chenlianjing
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-3-16
收藏
得分:0 
为什么啊?
2008-03-17 22:06
Ethip
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:771
专家分:0
注 册:2008-1-18
收藏
得分:0 
回复 1# 的帖子
你怎么知道不正确?
那就试着换个数据类型@@
2008-03-17 22:41
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
得分:0 
s变量长度不够,换长整型试试。

我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2008-03-18 09:54
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
#include<stdio.h>
void main()
{
    long int s=1,n;
    printf("in put the number:");
    scanf("%ld",&n);
    for(long int i=1;i<=n;i++)
        s=s*i;
    printf("the answer is %ld\n",s);
}
n!一般都很大,13!既可以超过long
精确计算用数组,近似的用double或者是斯特灵公式。。
不过这代码。。。有这么写的么。。。

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-03-18 16:34
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
和数值范围有关
你的代码,在编译器下是无法通过的,我试着改了一下,好象n值在16时貌似正常,17时就是负数了,可能是不正常的了。不过确如LS所言,没必要求那么多的n!。

下面是我改动的代码,在WIN-TC下运行正常:
#include<stdio.h>
void main()
{
    long s=1;
    int i,n;
    printf("in put the number:");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        s=s*i;
    printf("the answer is %ld\n",s);
}
2008-03-18 16:50
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
有兴趣可以查查大数阶乘的做法,其实没什么用。
记得曾经写了一道把12个字符全排列,在输入一个文件,结果这个文件长达6。5g....

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-03-18 17:58
zyhfbim1a9
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2008-3-15
收藏
得分:0 
这个输入任何数字都没问题
/*以上错误原因:当你把s定位整型时,输入10,s结果超出范围,所以系统报错,
当输入17,原因一样。所以你可以把s定为单精度型以上,只要输入所指定数据类型范围以内的数字都不会出错。(此仅为个人观点,如有瑕疵,请高手指出,呵呵)*/
#include<stdio.h>
void main()
{
 float i, s=1, n;
   printf("in put the number:");
   scanf("%f",&n);
    for(i=1;i<=n;i++)
        s=s*i;
    printf("the answer is %f\n",s);
}
2008-03-18 18:03
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
回复 8# 的帖子
把n定义为float是不合适的。
i++是错的。
应该把i,n定义为int
可以这样做
#include<stdio.h>
int main()
{
    float a=1,c;
    long b;
    scanf("%ld",&b);
    printf("%ld!=",b);
    if(b==0||b==1){
        printf("1.00*10^0\n");
        return 0;
    }
    for(c=0;b>1;b--){
        a*=b;
        while(a>10){
            a/=10;
            c++;
        }
    }
    printf("%.2f*10^%.0f\n",a,c);
    return 0;
}

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-03-18 18:10
快速回复:为什么N在10以下就OK,超过就不正确了呢
数据加载中...
 
   



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

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