算法与数据结构实验题 1.10 单身狗进化
实验任务
这一天晚上,弯通又做梦了,并且梦到了一个帅气的男孩纸!这个男孩给了弯通一个数字 n。男孩离开前告诉弯通,n!(n 的阶乘)的位数就是距离弯通脱单的天数。矜(ji)持(ke)的弯通想知道自己还有多久能脱单,快写个程序帮助他!
数据输入
输入第一行为一个正整数 n(1<=n<=25000)。
数据输出
输出 n!的位数。
- 输入示例1
10
- 输出示例1
7
- 输入示例2
20
- 输出示例2
19
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=2e9+1;
int n;
double sum;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) {
sum+=log10(i);
}
printf("%d",(int)sum+1);
return 0;
}
思路
其实把位数理解成:“阶乘中的每一个数为位数提供的加权”,也就是代码中的log10(i)
,这题就迎刃而解了,将1-n所有数的“加权”相加,最后便是答案了,注意输出时需要把小数向下取整,可以使用floor函数也可也像我的程序中那样直接转为int,记住位数需要加上一,毕竟log10=1,log1=0,计算出来的位数是需要加一哒