HDU1012 Calculate e

简介:
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1012

解法一:最直观的方法,就是递归计算来求各项之和

#include <iostream>
#include <iomanip>
using namespace std;

double curItem(int n)
{//当前子项
    if (n==0)
    {
        return 1;
    }
    else
        return curItem(n-1)/n;

}
double sum(int n)
{
    if(n==0)
        return 1;
    else 
        return sum(n-1)+curItem(n);

}
void caculateE(int n)
{//输出指定n下e的值
    double tmp1,tmp2=1.0f,result=0.0f;
    int i;
    result = sum(n);
    if(n==0||n==1)
    {
        cout<<n<<" "<<static_cast<int>(result)<<endl;
    }
    else if(n==2)
    {
        cout<<setiosflags(ios::fixed)<<setprecision(1);
        cout<<n<<" "<<result<<endl;
    }
    else
    {
        cout<<setiosflags(ios::fixed)<<setprecision(9);
        cout<<n<<" "<<result<<endl;
    }
}
int main(int argc, char *argv[])
{
    int n,i;
    cout<<"n e"<<endl;
    cout<<"- -----------"<<endl;
    for(i=0;i<=9;++i)
    {
        caculateE(i);
    }
    cin>>i;
    return 0;
}

解法二:题中给出的计算e的式子是由e^x的泰勒级数展开而得,在计算之前可以使用个技巧,就是把它们叠乘起来改写成:
e=(1+(1+1/2(1+1/3(1+1/4(1+…1/(n-1)(1+1/n))))),从最里面的括号往外算,共做n次除法和加法得一段结果,运算效率也是O(N*M),但是由于收敛速度快些,所以N项节省一些,

#include <iostream>
#include <iomanip>
using namespace std;

double doCaculate(int n)
{//实际的计算
    double tmp1,tmp2=1.0f,result=0.0f;
    int i;

    for(i=n;i>=1;--i)
    {
        tmp1 = static_cast<double>(1)/static_cast<double>(i);
        tmp2 = 1.0f+tmp1*tmp2;
    }
    return tmp2;
}
void caculateE(int n)
{//输出指定n下e的值,主要是输出格式的处理
    double result = 0.0f;
    result = doCaculate(n);
    if(n==0||n==1)
    {
        cout<<n<<" "<<static_cast<int>(result)<<endl;
    }
    else if(n==2)
    {
        cout<<setiosflags(ios::fixed)<<setprecision(1);
        cout<<n<<" "<<result<<endl;
    }
    else
    {
        cout<<setiosflags(ios::fixed)<<setprecision(9);
        cout<<n<<" "<<result<<endl;
    }
}
int main(int argc, char *argv[])
{
    int n,i;
    cout<<"n e"<<endl;
    cout<<"- -----------"<<endl;
    for(i=0;i<=9;++i)
    {
        caculateE(i);
    }
    return 0;
}


本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2007/12/25/1013925.html,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
Python
Calculating Dates
Calculating Dates
36 1
|
算法
uva 11549 CALCULATOR CONUNDRUM
题目链接 刘汝佳算法竞赛经典入门训练指南p42
39 0
UVa11549 - Calculator Conundrum (Floyd判圈法)
UVa11549 - Calculator Conundrum (Floyd判圈法)
69 0
|
Linux 定位技术 数据安全/隐私保护
【Calculate】Calculate Linux安装操作记录
【Calculate】Calculate Linux安装操作记录
169 0
HDU-1012,u Calculate e
HDU-1012,u Calculate e
|
人工智能
Kuroni and Impossible Calculation——容斥原理-鸽笼原理-抽屉原理
题目描述 已知一个数组a[n],请计算式子:∏_{1≤i<j≤n}|ai−aj| 的值,其中1<=i,j<=n;我们可以认为,这一式子等价于 |a1−a2|⋅|a1−a3|⋅ … ⋅|a1−an|⋅|a2−a3|⋅|a2−a4|⋅ … ⋅|a2−an|⋅ … ⋅|an−1−an|
133 0
Kuroni and Impossible Calculation——容斥原理-鸽笼原理-抽屉原理
|
Go
HDOJ 1012 u Calculate e
HDOJ 1012 u Calculate e
120 0
HDOJ 1012 u Calculate e
|
C++
蓝桥杯 - C++ calculation
蓝桥杯 - C++ calculation
179 0
|
Java C语言
HDOJ(HDU) 2139 Calculate the formula(水题,又一个用JavaAC不了的题目)
HDOJ(HDU) 2139 Calculate the formula(水题,又一个用JavaAC不了的题目)
108 0
|
算法
HDOJ 1202 The calculation of GPA
HDOJ 1202 The calculation of GPA
134 0