题目描述:
一个数N为从1开始K个连续整数的积,求这K个数。
输入格式:
一个数N
输出格式:
从1到k,共k个数,倒序输出,以逗号隔开。如果n不能表示为k个连续整数的积,输出-1;
样例输入:
120
样例输出:
5,4,3,2,1
提示:
N≤10^16
时间限制: 1000ms
空间限制: 256MB
这是一道二分答案题,简单。
代码实现:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,l=1,r=20,temp,ans,mid;
int f(int n){
int s=1;
for(int i=1;i<=n;i++)s*=i;
return s;
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
while(l<=r){
mid=(l+r)/2;
temp=f(mid);
if(temp==n){
ans=mid;
break;
}
if(temp<n){
l=mid+1;
}
else{
r=mid-1;
}
}
if(ans==0)cout<<-1;
else{
for(int i=ans;i>=1;i--){
cout<<i;
if(i!=1)cout<<",";
}
}
return 0;
}