【每日刷题】Day92
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
1. 面试题 16.05. 阶乘尾数 - 力扣(LeetCode)
2. 取近似值_牛客题霸_牛客网 (nowcoder.com)
3. 数列_牛客题霸_牛客网 (nowcoder.com)
1. 面试题 16.05. 阶乘尾数 - 力扣(LeetCode)
//这类题很明显就是数学类的题,需要找到规律,否则很难解决。
//先让我们理解题目,题目要求我们求出一个数(n)阶乘后的结果有多少个尾随0,尾随零就是这个数的最后面有多少个连续的0
//理解题目后我们再来分析,一个数想要有尾随0,需要满足什么条件呢?
//这里直接说结论,有一个尾随0说明有一个因子10,我们将因子10拆解为两个质因子:2和5,由此我们得出结论,一个数想要有一个尾随0就必须要有一个2和5的相乘。反之,有一个2和5的相乘,就说明这个数有一个尾随0。
//到目前为止我们已经掌握了规律,但这里还有一个小点。
//因为每两个数就会有一个2(2、4、6、8....),而每五个数才有一个5(5、10、15...),因此,2的数量一定是比5要多的,因此我们只需要计算有多少个5相乘就能够计算出有多少个尾随0。
//那么现在的问题就是如何计算有多少个5相乘呢?
//这里就需要发挥我们的数学思维,来看下面的图
//实现代码如下,代码很简单,但是理解起来比较困难
class Solution {
public:
int Get_n (int n)
{
if(n<5)
return 0;
else
return (n/5+Get_n(n/5));
}
int trailingZeroes(int n)
{
return Get_n(n);
}
};
2. 取近似值_牛客题霸_牛客网 (nowcoder.com)
//没什么好分析的,基础语法题
#include <iostream>
using namespace std;
int main()
{
double a = 0;
cin>>a;
int b = a;
if(a-b>=0.5)
b++;
cout<<b<<endl;
return 0;
}
3. 数列_牛客题霸_牛客网 (nowcoder.com)
//思路:我们将数列的每一项求出来存入一个数组中,随后直接访问数组就能得到对应的项。
//注意:题目所给的k范围为1~1000000,因此在求后面项的大小时必然会造成溢出,题目也给了我们提示,让我们求第k项模32767的结果,因此我们在求每一项大小时需要存储模上32767得到的结果。
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int arr[1000000] = {0};
arr[0] = 1;
arr[1] = 2;
for(int i = 2;i<1000000;i++)
{
//求出每一项的值
arr[i] = arr[i-1]*2+arr[i-2];
//防止溢出,模上32767,模完后不会影响后续的项模32767的值
arr[i]%=32767;
}
while(n--)
{
int k;
cin>>k;
cout<<arr[k-1]<<endl;
}
return 0;
}