【题目链接】

ybt 1092:求出e的值
OpenJudge NOI 1.5 35:求出e的值

【题目考点】

1. 求一个数的阶乘

假设求n的阶乘,设结果变量为r,其初值为1。
i从1循环到n,每次循环将i与r相乘,结果赋值给r。
最后得到的r就是阶乘的结果

int f(int n)//求n的阶乘函数,返回值是n的阶乘。
{int r = 1;for(int i = 1; i <= n; ++i)r *= i;return r;
}

2. 求和

3. 循环嵌套

【注意事项】

由于本题中n的最大值是15,而15!15!15!的值为1307674368000,共13位,超出了int型量可以表示的范围。
因此保存阶乘值的类型设为double

【思路及题解代码】

解法1:循环嵌套

在求和的循环内部,实现求1i!\frac{1}{i!}i!1​的逻辑

#include <bits/stdc++.h>
using namespace std;
int main()
{int n;cin>>n;double sum = 1, v;//sum:和,初始值是1,再分别加各个项。v:某一项的值 for(int i = 1; i <= n; ++i){v = 1; for(int j = 1; j <= i; ++j)//求1 / i! v *= 1.0 / j;sum += v;}cout<<fixed<<setprecision(10)<<sum;return 0;
}

解法2:设置阶乘函数

循环加和,在循环中调用阶乘函数,求数i的阶乘i!i!i!,继而求出1i!\frac{1}{i!}i!1​,将其加入和中。

#include <bits/stdc++.h>
using namespace std;
double f(int n)//求n的阶乘
{double r = 1;for (int i = 1; i <= n; ++i)r *= i;return r;
}
int main()
{int n;cin>>n;double sum = 1;//和的初始值是1,再分别加各个阶乘项 for(int i = 1; i <= n; ++i)sum += 1 / f(i);cout<<fixed<<setprecision(10)<<sum;return 0;
}

解法3:

观察公式,不看最初的1,从1!开始算第1项。第1项是11!\frac{1}{1!}1!1​,第2项是12!\frac{1}{2!}2!1​,…,第i-1项是1(i−1)!\frac{1}{(i-1)!}(i−1)!1​,第i项是1i!\frac{1}{i!}i!1​
已知1i!=1i⋅1(i−1)!\frac{1}{i!} = \frac{1}{i} \cdot \frac{1}{(i-1)!}i!1​=i1​⋅(i−1)!1​
只需要设变量v表示某一项的值,初值为1。
每次循环,对v除以i,即可得到新的一项,并将该项加入和sum中。
该解法的时间复杂度为O(n)O(n)O(n),优于解法1,2。

#include <bits/stdc++.h>
using namespace std;
int main()
{double sum = 1, v = 1;//s为加和,v为每一项的值int n;cin>>n;for(int i = 1; i <= n; ++i){v /= i;sum += v;}cout<<fixed<<setprecision(10)<<sum;return 0;
}

信息学奥赛一本通 1092:求出e的值 | OpenJudge NOI 1.5 35相关推荐

  1. 信息学奥赛一本通 1110:查找特定的值 | OpenJudge NOI 1.9 01

    [题目链接] ybt 1110:查找特定的值 OpenJudge NOI 1.9 01:查找特定的值 [题目考点] 1. 顺序查找 [题解代码] 解法1: #include <bits/stdc ...

  2. 信息学奥赛一本通 1012:计算多项式的值 | OpenJudge NOI 1.3 07

    [题目链接] ybt 1012:计算多项式的值 OpenJudge NOI 1.3 07:计算多项式的值 [题目考点] 1. 计算表达式书写 了解*的运算优先级比+高. 了解()可以改变运算优先级 2 ...

  3. 信息学奥赛一本通 1149:最长单词2 | OpenJudge NOI 1.13 16

    [题目链接] ybt 1149:最长单词2 OpenJudge NOI 1.13 16:最长单词2 [题目考点] 1. 字符串遍历 2. 处理多个字符串 3. while(cin >> - ...

  4. 信息学奥赛一本通 1143:最长最短单词 | OpenJudge NOI 1.7 25

    [题目链接] ybt 1143:最长最短单词 OpenJudge NOI 1.7 25:最长最短单词 [题目考点] 1. 字符串处理 [解题思路] 思路1:将字符串分解为多个单词,而后求出各个单词的长 ...

  5. 信息学奥赛一本通 1095:数1的个数 | OpenJudge NOI 1.5 40

    [题目链接] ybt 1095:数1的个数 OpenJudge NOI 1.5 40:数1的个数 [题目考点] 1. 分离整数的各位数字 对于数字a,a%10可以取到其个位,a/=10(整除)可以去掉 ...

  6. 信息学奥赛一本通 1171:大整数的因子 | OpenJudge NOI 1.6 13:大整数的因子

    [题目链接] ybt 1171:大整数的因子 OpenJudge NOI 1.6 13:大整数的因子 [题目考点] 1. 高精度 考察:高精模低精 高精度计算讲解 [解题思路] 先把参与运算的数字当成 ...

  7. 信息学奥赛一本通 1137:加密的病历单 | OpenJudge NOI 1.7 12

    [题目链接] ybt 1137:加密的病历单 OpenJudge NOI 1.7 12:加密的病历单 [题目考点] 1. 字符串处理 [解题思路] 加密过程有三个工序:循环左移,逆序存储,大小写反转. ...

  8. 信息学奥赛一本通 1037:计算2的幂 | OpenJudge NOI 1.3 20

    [题目链接] ybt 1037:计算2的幂 OpenJudge NOI 1.3 20:计算2的幂 [题目考点] 1. 不同整型数据的范围 类型 占用字节数 可表示数字范围 char 1 -127~12 ...

  9. 信息学奥赛一本通 1023:Hello,World!的大小 | OpenJudge NOI 1.2 10

    [题目链接] ybt 1023:Hello,World!的大小 OpenJudge NOI 1.2 10:Hello, World!的大小 [题目考点] 1. sizeof运算符 sizeof可以求某 ...

最新文章

  1. 小程序内容审核违规过滤,在小程序使用security.msgSecCheck
  2. shell中数字大小的比较
  3. WAL streaming (max_wal_senders 0) requires wal_level replica or logical
  4. MongoDB安装步骤
  5. C语言代码规范(九)运算符优先级使用括号提高阅读性
  6. 深度学习领域有哪些瓶颈
  7. Java即时类| toString()方法与示例
  8. CSS中自适应屏幕分辨率
  9. 新的默认设置:Sass颜色同义词库
  10. java三角函数计算器_java 计算器代码能实现三角函数和阶乘功能
  11. C语言程序——math库的函数应用
  12. 人工智能帮你文字转为Logo | 机器学习
  13. oracle数据库查表函数,Oracle数据库的常用函数列表快速查1
  14. 初学安装oracle11g遇到的问题,以及解决方案
  15. 重装系统后电脑耳机插前面没有声音输出怎么办?
  16. c语言十全十美游戏规则,十全十美游戏
  17. 李沐《动手学》-kaggle-房价预测-submission
  18. Delphi 2010安装及使用UniDAC安装和使用笔记
  19. 游戏道具平台|基于Springboot+Vue实现游戏道具平台系统
  20. 【朝花夕拾】Android编码风格篇

热门文章

  1. 中国医学不能走西方道路
  2. 编译asp.net文件为dll文件
  3. 通过Python让数据产生价值,做到这4个字就够了
  4. STM32之定时器原理
  5. 排查 Linux 系统故障,看这一篇足够了。
  6. 清华新生C++作业难上热搜!大厂猎头表示做上了直接给offer
  7. 天鼎:一个技术人在世界读书日的遐想
  8. oracle 删除重复记录
  9. Oracle提供的序号函数
  10. Linux系统:Centos7下搭建PostgreSQL关系型数据库