阶乘 n!正整数的 n 被定义为所有小于或等于的正整数的乘积 n.
例如,21!=1?2?3?…?21=51090942171709440000.
计算一个小整数的阶乘是很简单的,而且你以前可能已经做过很多次了。然而,在这个问题中,您的任务被颠倒了。你被赋予了的价值 n! 你必须找到的价值 n.
输入
输入为 n 的阶乘, n!的位数最多为 1e6 位。
输出
输出的 n 的值
Input1
120
Output1
5
Input2
51090942171709440000
Output2
21
Input3
10888869450418352160768000000
Output
27
解析:
直接算就行
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef pair<int,int> PII;
const double PI=acos(-1.0);
const int N=2e6+10,p=1e9+7;
string s;
int qmi(int a,int k)
{
int ans=1;
while (k)
{
if (k&1) ans=ans*a%p;
k >>=1;
a=a*a%p;
}
return ans;
}
void solve()
{
cin>>s;
int x=0,id=0;
for (int i=s.size()-1;i>=0;i--)
{
int k=s[i]-'0';
x=(x%p+k%p*qmi(10,id)%p)%p;
id++;
}
int ans=1,cnt=1;
while (1)
{
ans=(ans%p*cnt%p)%p;
if (ans==x) break;
cnt++;
}
cout<<cnt;
}
signed main()
{
ios;
solve();
}