算法与数据结构实验题 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,计算出来的位数是需要加一哒

posted @ 2024-11-25 19:47  Severj  阅读(116)  评论(0)    收藏  举报