ich ein Protokoll Wert Y
gegeben haben, ich will den Anti-Log von Y dhFinden Sie den modo Wert
ans = (Math.pow(10,Y))%mod
wo mod = 1e9+7
und der anti-Log von Y berechnen wird immer integer dh
Y berechnen als folgen Y= log(a) a is very large integer of range 10^100000
Also für gegebene Y muss ich ans berechnen? Wie man das unter Berücksichtigung der Mod-Operation macht.
Mein Ansatz
double D = Y -(int)Y
long Pow = (long)Y
for(int i=1;i<=Pow;i++) ans = (ans*10)%mod;
ans = (ans*Math.pow(10,D))%mod
Aber es ist nicht richtig kann jemand effizienten Ansatz vorschlagen, hier sein? BigDecimal kann dort nützlich sein?
Beispiel:
Y = 16.222122660468525
die straight forward-Methode und Abrunden d.h Math.log(10,Y)
mir 1667718169966651
geben, aber die Verwendung von Schleifen es ist mir 16677181699666510
. Ich benutze Mod jetzt nicht nur erklären, dass es einen Fehler gibt.
Hier Y
ist klein, so direkte Methode funktioniert und wir können Mod leicht nehmen. wenn Y ein Bereich von 10000 ist, wird es nicht funktionieren und überlaufen, so dass wir Mod verwenden müssen.
Nur um zu bestätigen, ist das Protokoll hier "log (a)" oder "log10 (a)"? und warum wird Math.pow (Math.E, (Math.log (a))) nicht funktionieren, um den Antilog zu finden? – nullpointer
@nullpointer es ist Basis 10 – Regression
Was ist dann falsch mit Math.pow (10, (Math.log (a))) '? – nullpointer