Мое решение было довольно быстрым, но недостаточно. Мне нужно быстрее. Как я могу сократить свое время? Входной номер: N (0 ≤ N ≤ 1000000) Основание должно быть: основание (2 ≤ ≤ база 1000)Найти число цифр факториала целого числа в определенной базе
- вход 5! в 10 базах. Выход: 3
- Вход 22! в 3 базах. Выход: 45
Лимит времени: 2 секунд (ы), и Лимит памяти: 32 MB
Вот мой код в языке Си:
#include<stdio.h>
#include<math.h>
int factorialDigitExtended (int n, int base) {
double x = 0;
for (int i = 1; i <= n; i++) {
x += log10 (i)/log10(base);
}
int res = ((int) x) + 1;
return res;
}
int main(){
int i, t, n, b;
for(i=1; i<= t; i++){
scanf("%d %d", &n, &b);
printf("Case %d: %d\n", i, factorialDigitExtended(n, b));
}
return 0;
}
Как вы измеряете время выполнения? Время выполнения зависит от используемой машины, есть ли у вас конкретная настройка? – CodeMonkey
Пожалуйста, определите «быстрее» – Fefux
Формула 'закрытая форма', аппроксимирующая факториал, должна быть выиграна для ya: https://en.wikipedia.org/wiki/Stirling%27s_approximation –