| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 365 人关注过本帖
标题:能不能帮新手看看,为什么输入小数就错误了
只看楼主 加入收藏
scy0309
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-10-28
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
能不能帮新手看看,为什么输入小数就错误了
题目:
输入一个实数x,计算多项式x+(x^2)/2!+(x^3)/3!+...的和,直到末项的绝对值小于10^-5(保留三位小数)

例子:
输入
1
2
3.2

输出
1.718
6.389
23.533

我的代码
#include<stdio.h>
#include<math.h>
int main()
{
    double item,s,x,factorial(int n);
    int n;
    n=1;
    s=0;
    item=1;
    scanf("%lf",&x);
    while(item>=1e-5)
    {
        item=pow(x,n)/factorial(n);
        n++;
        s=s+item;
    }
    printf("%.3f\n",s);
    return 0;
}


double factorial(int n)
{
    int i,fact=1;

    for(i=1;i<=n;i++)
    {
    fact=fact*i;
    }

    return fact;
}





程序在运行时,输入1,2的结果都是对的,可是输入3.2时候输出的是22.281 并不是题目给出的例子的答案,我实在找不到错误,是溢出了吗?求大神指点迷津!谢谢!
搜索更多相关主题的帖子: return double include 多项式 绝对值 
2015-10-28 00:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
我先写个代码试试看
程序代码:
#include <stdio.h>

double foo( double x )
{
    double s = 0.0;
    for( double n=1,item=1; item*=x/n, item>1.0E-5; ++n )
        s += item;
    return s;
}

int main( void )
{
    printf( "%.3f\n", foo(3.2) );

    return 0;
}
果然输出 23.533
看来是你的代码有问题,然后我输出每一步的item值,发现在n等于13时,你的item不对。
原来 13! = 6227020800,但你那烂函数factorial返回的是 1932053504,溢出了



2015-10-28 09:29
快速回复:能不能帮新手看看,为什么输入小数就错误了
数据加载中...
 
   



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

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