信息学奥赛一本通 1092:求出e的值 | OpenJudge NOI 1.5 35
【题目链接】
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相关推荐
- 信息学奥赛一本通 1110:查找特定的值 | OpenJudge NOI 1.9 01
[题目链接] ybt 1110:查找特定的值 OpenJudge NOI 1.9 01:查找特定的值 [题目考点] 1. 顺序查找 [题解代码] 解法1: #include <bits/stdc ...
- 信息学奥赛一本通 1012:计算多项式的值 | OpenJudge NOI 1.3 07
[题目链接] ybt 1012:计算多项式的值 OpenJudge NOI 1.3 07:计算多项式的值 [题目考点] 1. 计算表达式书写 了解*的运算优先级比+高. 了解()可以改变运算优先级 2 ...
- 信息学奥赛一本通 1149:最长单词2 | OpenJudge NOI 1.13 16
[题目链接] ybt 1149:最长单词2 OpenJudge NOI 1.13 16:最长单词2 [题目考点] 1. 字符串遍历 2. 处理多个字符串 3. while(cin >> - ...
- 信息学奥赛一本通 1143:最长最短单词 | OpenJudge NOI 1.7 25
[题目链接] ybt 1143:最长最短单词 OpenJudge NOI 1.7 25:最长最短单词 [题目考点] 1. 字符串处理 [解题思路] 思路1:将字符串分解为多个单词,而后求出各个单词的长 ...
- 信息学奥赛一本通 1095:数1的个数 | OpenJudge NOI 1.5 40
[题目链接] ybt 1095:数1的个数 OpenJudge NOI 1.5 40:数1的个数 [题目考点] 1. 分离整数的各位数字 对于数字a,a%10可以取到其个位,a/=10(整除)可以去掉 ...
- 信息学奥赛一本通 1171:大整数的因子 | OpenJudge NOI 1.6 13:大整数的因子
[题目链接] ybt 1171:大整数的因子 OpenJudge NOI 1.6 13:大整数的因子 [题目考点] 1. 高精度 考察:高精模低精 高精度计算讲解 [解题思路] 先把参与运算的数字当成 ...
- 信息学奥赛一本通 1137:加密的病历单 | OpenJudge NOI 1.7 12
[题目链接] ybt 1137:加密的病历单 OpenJudge NOI 1.7 12:加密的病历单 [题目考点] 1. 字符串处理 [解题思路] 加密过程有三个工序:循环左移,逆序存储,大小写反转. ...
- 信息学奥赛一本通 1037:计算2的幂 | OpenJudge NOI 1.3 20
[题目链接] ybt 1037:计算2的幂 OpenJudge NOI 1.3 20:计算2的幂 [题目考点] 1. 不同整型数据的范围 类型 占用字节数 可表示数字范围 char 1 -127~12 ...
- 信息学奥赛一本通 1023:Hello,World!的大小 | OpenJudge NOI 1.2 10
[题目链接] ybt 1023:Hello,World!的大小 OpenJudge NOI 1.2 10:Hello, World!的大小 [题目考点] 1. sizeof运算符 sizeof可以求某 ...
最新文章
- 小程序内容审核违规过滤,在小程序使用security.msgSecCheck
- shell中数字大小的比较
- WAL streaming (max_wal_senders 0) requires wal_level replica or logical
- MongoDB安装步骤
- C语言代码规范(九)运算符优先级使用括号提高阅读性
- 深度学习领域有哪些瓶颈
- Java即时类| toString()方法与示例
- CSS中自适应屏幕分辨率
- 新的默认设置:Sass颜色同义词库
- java三角函数计算器_java 计算器代码能实现三角函数和阶乘功能
- C语言程序——math库的函数应用
- 人工智能帮你文字转为Logo | 机器学习
- oracle数据库查表函数,Oracle数据库的常用函数列表快速查1
- 初学安装oracle11g遇到的问题,以及解决方案
- 重装系统后电脑耳机插前面没有声音输出怎么办?
- c语言十全十美游戏规则,十全十美游戏
- 李沐《动手学》-kaggle-房价预测-submission
- Delphi 2010安装及使用UniDAC安装和使用笔记
- 游戏道具平台|基于Springboot+Vue实现游戏道具平台系统
- 【朝花夕拾】Android编码风格篇