Meine Lösung war ziemlich schnell, aber nicht genug. Ich brauche mehr schneller. Wie kann ich meine Zeit reduzieren? Eingangsnummer: N (0 ≤ n ≤ 1000000) Base sein sollte: Basis (2 ≤ Basis ≤ 1000)Finden Sie die Anzahl der Ziffer (n) des Faktors einer ganzen Zahl in einer bestimmten Basis
- Eingang 5! in 10 Basis. Ausgang ist: 3
- Eingang 22! in 3 Basis. Die Ausgabe ist: 45
Zeitlimit: 2 Sekunden (s) und Memory Limit: 32 MB
Hier ist mein Code in C-Sprache:
#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;
}
Wie messen Sie die Ausführungszeit? Die Ausführungszeit hängt stark von der verwendeten Maschine ab. Gibt es eine bestimmte Konfiguration, die Sie im Auge haben? – CodeMonkey
Bitte definieren "schneller" – Fefux
Es gibt 'geschlossene Form' Formel näherungsweise faktoriell, sollte für ya gewinnen: https://en.wikipedia.org/wiki/Stirling%27s_approximation –