PHP BigInt?
Hallo. Also in Java gibt es ja die BigInteger Instanze. Nun bin ich gerade in PHP und habe diese Zahl:
500105175408332501131480
Und diese Zahl muss ich geteilt durch 97 rechnen. Also halt in PHP. Kennt ihr einen weg? Danke im voraus!
P.S.
Ist eine Coding Challenge = Ich kann keine Requirements etc. installieren.
4 Antworten
So langsam frage ich mich, wo die Challenge ist, wenn ich laufend deine Arbeit übernehme... :P
public class IbanTwister {
public static void main(String args[]) {
String iban = "DE80500105175408332501";
//hier höngen wir die ersten 4 Zeichen hinten dran
iban += iban.substring(0,4);
//hier entfernen wir vorne die ersten 4 Zeichen
iban = iban.substring(4,iban.length());
//Array mit allen Zeichen die wir ersetzen wollen
String[] buchstaben = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
//Jetzt durchlaufen wir das Array und ersetzen einfach jedes Zeichen mit der gewünschten Zahl.
//A soll mit 10 ersetzt werden, B mit 11 usw. A ist im array an 0. Stelle, also ersetzen wir jedes Zeichen mit i+10 in der Schleife
for (int i=0; i<buchstaben.length; i++) {
iban = iban.replace(buchstaben[i], ""+(i+10));
iban = iban.replace(buchstaben[i].toLowerCase(), ""+(i+10));
}
//String modulo int
int rest = moduloWithString(iban, 97);
//Welcher Rest bleibt?
System.out.println(iban + " modulo 97 ergibt einen Rest von " + rest);
}
static int moduloWithString(String s, int a) {
int rest = 0;
for (int i=0; i<s.length(); i++) {
rest=(rest * 10 + (int)s.charAt(i) - '0') % a;
}
return rest;
}
}
Das auf PHP umwandeln. Die Modulo-Funktion sollte für PHP wohl ca so aussehen:
function moduloWithString($s, $a) {
$rest = 0;
for ($i=0; $i<$y=strlen($s);$i++) {
$rest=($rest * 10 + $s[$i] - '0') % $a;
}
return $rest;
}
Allerdings habe ich ewig nichts in PHP gemacht, daher übernehme ich keine Garantie.
Haha. Das ist ja nur 5% der Challenge die IBAN ist nur ein Nebenteil. Das replacen hab ich diesmal gepackt nur das rechnen ... Uff. Danke dir!
2 möglichkeiten:
- mit dezimal wie das ein mensch machen würde ... sehr ineffizient. aber für eine einzige zahl gehts
- in zwei normale interger teilen, die vordere dividieren und den rest zur hinteren hinzurechnen (alles binär betrachtet). dann die hintere mit dem überlauf auch dividieren.
also quasi aaaaaaabbbbbbb / 97 = aaaaaa / 97, (gleitkommateil + bbbbbb / 97)
den gleitkommateil kannst mit geeigneten SHL wieder auf das bbbbb Format bringen
Ehhh ... Bin verwirrt. Also den String in der Mitte teilen und dann beide Teile durch 97?
https://stackoverflow.com/questions/68694954/how-do-divide-a-h-u-g-e-number-in-php
"Merkwürdig" hier steht die dasselbe Frage und Lösungen werden hier auch angeboten.
bcmath ist auf der Seite leider nicht verfügbar ... Sorry, vergessen zu sagen.
im schlimmsten fall ein string daraus machen und wie man das auch auf einem blatt papier macht, geteilt durch rechnen .viel spass beim algo bau .