tema
1129: Capítulo cinco: Enamorarse de ti accidentalmente
Límite de tiempo: 5 segundos Límite de memoria: 128 MB
Envío: 661 Resuelto: 176
[Enviar] [Estado] [Tarjeta web]
Descripción
La mayoría de las personas con sangre O son activistas, y Zheng Wei ha llevado esta característica al extremo. Al día siguiente, en la clase, Ruan Ruan se sorprendió al descubrir que estaba luchando para escribir en clase como nunca antes, así que se inclinó y le preguntó: "¿Qué estás escribiendo?". Zheng Wei le mostró a Ruan Ruan lo que había hecho en la mañana. Con la cristalización de la sabiduría, Ruan Ruan lo miró, "El plan de acción detallado del cautivo Chen Xiaozheng ..." Después de que terminó de leer, se quedó sin palabras. Es un libro pequeño bastante nuevo. Se han escrito casi diez páginas de manera elocuente. Las impresiones pequeñas están escritas con pulcritud. Todos los enlaces y pasos están detallados. Los puntos clave y las precauciones están incluso subrayados.
Estrategia de acción 1: Encuentro con Chen Xiaozheng en el aula de autoaprendizaje. Zheng Wei se sentó detrás de él, fingiendo no saberlo, y le hizo una pregunta matemática: ¿Sabes cuántos factoriales hay en 520? Sin embargo, Chen Xiaozheng ignoró a Zheng Wei en absoluto. .
¿Conoce la respuesta a esta pregunta? Date prisa y piénsalo, si alguien viene a preguntarte algún día. . . . . .
Aporte
Una N por línea, 0 <= N <10 ^ 7, ¡debe responder rápidamente!
Producción
Imprima el número de dígitos del factorial de N.
Entrada de muestra
5
6
520
Salida de muestra
3
3
1189
idea
A primera vista, esta pregunta puede parecer que hay que hacer estallar la violencia. Una búsqueda en Internet resulta tener una fórmula ...
Luego, configure la fórmula directamente ...
int str(int n)
{
return floor(log10(sqrt(2*PI*n))+n*log10(n/e))+1;
}
Código AC
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pre(i,a,b) for(int i=a;i>=b;--i)
#define m(x) memset(x,0,sizeof x)
const double PI = acos(-1);
const double e = exp(double(1));
const int maxn = 1e6+5;
int str(int n)
{
return floor(log10(sqrt(2*PI*n))+n*log10(n/e))+1;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
if(n<=3)printf("1\n");
else
printf("%d\n",str(n));
}
return 0;
}