#include<stdio.h>
#include<string.h>
#include<math.h>
// 已知不等式 1!+2!+3!+...+m!‹n,请编程对用户指定的n值计算并输出满足该不等式的m的整数解。
//输入一个整数n,n为int范围内的正整型。
//输出m的取值范围,具体格式见输出样例。
int main()
{
//思路:先试一下这个阶乘和有没有问题,然后就是for循环从下往上找,不过找到一半或平方根就够了
//不到一半,举个例子
//n=8 ,m<=2
// n=10,m<=3
//n=35 ,m<=4
//一半和平方跟时间太长了。平方跟都能到12s,得换算法。
double factorial2(int x);
// printf("%d",factorial2(5));//153,好没有问题
double n;int cnt=0;//int flag=1;
scanf("%lf",&n);
for(int i=1;i<(double)sqrt(n);i++)
{
if(factorial2(i)<n)//假如n=8 第一次循环factorial2(1)<8,cnt=1;第二次factorial2(2)==3<8,cnt=2
{ //第三次 factorial2(3)==9>8,cnt不变,等待for循环结束
cnt++;
}
if(i>cnt)break; //给个break语句,当cnt不变了,i还是在自增。这时候给个条件让他终止循环,
}//这个用法跟continue不一样
printf("m<=%d",cnt);
return 0;//今天又是没带return 0的一天
}
double factorial2(int x)//把之前写过的阶乘的函数直接拿过来用
{
double product=1;
double sum=0;
for(int i=1;i<=x;i++)
{
product*=i;
sum+=product;
}
return sum;
}