A.签到题
Time Limit: 1s Memory Limit: 32768K
Problem Description
作为签到题当然是很水的啦。你只要输出n!可以被多少个2整除就可以了。
Input
多组数据,每组数据输入一个n(1 <= n <= 10^18)
Output
每组数据输出一行,输出n!可以被多少个2整除。
作为签到题,这应该是我遇到最坑的了,没有注意到n值的范围,测试用例过大,导致根本出不来结果(比赛结束自己测试了一下)。一开始想着累乘再取余的方法根本不适用于这么大的数...
- 题目:求1,2,3···n,每个数分解质因数之后一共有多少个2?
- n/2——1~n中是2的倍数的有几个?——1~n/2——循环操作,累加
- 考虑到n值很大,用位操作符进行快速的乘除操作
#include <iostream>
using namespace std;
int main()
{
long long t, n;//32位宽
long long ans;
while (cin >> n)
{
ans = 0;
while (n)
{
n = n >> 1;//1~n中,有多少个数能被2整除
//位操作符,快速的乘除运算,防止超时!
//数字二进制向右移1位,相当于除以2
ans += n;有多少个数能被2整除就有多少个2
cout << "LL"<<ans << endl;
}
cout << ans << endl;
}
return 0;
}
。。。。。。。