[蓝桥杯2016决赛]阶乘位数
题目描述
9的阶乘等于:362880
它的二进制表示为:1011000100110000000
这个数字共有19位。
请你计算,9999 的阶乘的二进制表示一共有多少位?
输出
输出一个整数表示答案
分析
整数 m m m 在 k k k 进制下的位数为 ⌊ l o g k m ⌋ + 1 \lfloor log_km \rfloor + 1 \space ⌊logkm⌋+1 , 根据对数计算公式 l o g a c ∗ d = l o g a c + l o g a d log_ac*d = log_ac + log_ad \space logac∗d=logac+logad , 因此使用一个单重循环既可实现。
# include <iostream>
# include <cmath>
int main() {
double ans = 0;
for (int i=1; i<=9999; i++) {
ans += log2(i);
}
std::cout << (int)(floor(ans)) + 1;
return 0;
}