Hallo Leute,
ich versuche gerade zwei arrays nach der schulmethode zu Multiplizieren. Hab dazu auch schon was geschrieben aber irgendwo muss ich nen Fehler in meinem Code haben und ich find ihn nicht.
Ich weiß einfach nicht mehr weiter, vilt. findet ja jemand von euch den Fehler ?
Es sollen zwei Strings übergeben werden die Zahlen repräsentieren. Diese Zahlen sollen dann miteinander multipliziert werden und als String wieder zurück gegeben werden.
Das geht mit meiner Methode bis zu einer gewissen Stelle gut. Soll bedeuten, wenn ich mit BigInteger einen Vergleichswert ausgeben lasse sind die Strings bis zu einer gewissen Stelle gleich. danach wirds einfach nur falsch und ich komme nicht drauf woran es liegt.
Ich habe den Algorithmus auch schon für Integer Werte implemntiert, auch da war was falsch. Es sollte also nicht an dem hin und herrechnen mit Chars liegen sondern an der Multiplikationsmethode im allgemeinen.
LG WhiTeY
ich versuche gerade zwei arrays nach der schulmethode zu Multiplizieren. Hab dazu auch schon was geschrieben aber irgendwo muss ich nen Fehler in meinem Code haben und ich find ihn nicht.
Ich weiß einfach nicht mehr weiter, vilt. findet ja jemand von euch den Fehler ?
Es sollen zwei Strings übergeben werden die Zahlen repräsentieren. Diese Zahlen sollen dann miteinander multipliziert werden und als String wieder zurück gegeben werden.
Das geht mit meiner Methode bis zu einer gewissen Stelle gut. Soll bedeuten, wenn ich mit BigInteger einen Vergleichswert ausgeben lasse sind die Strings bis zu einer gewissen Stelle gleich. danach wirds einfach nur falsch und ich komme nicht drauf woran es liegt.
Ich habe den Algorithmus auch schon für Integer Werte implemntiert, auch da war was falsch. Es sollte also nicht an dem hin und herrechnen mit Chars liegen sondern an der Multiplikationsmethode im allgemeinen.
LG WhiTeY
Java:
public String mulStringWithReminder(String s, String s2) {
String erg = "";
char[]a= new char[s.length()];
char[]b= new char[s2.length()];
int[]z=new int[a.length+b.length];
int tmp = 0;
int carry = 0;
int j2 =0;
//Zahlen umgedreht in Character Arrays Schreiben um damit rechnen zu können.
for (int i = 0; i < a.length; i++) {
a[i]=s.charAt(a.length-1-i);
}
for (int i = 0; i < b.length; i++) {
b[i]= s2.charAt(b.length-1-i);
}
//Zwei Schleifen um alles miteinander zu Multiplizieren
for (int j = 0; j < a.length; j++) {
carry=0;
for ( j2 = 0; j2 < b.length; j2++) {
//ein wenig unschön aber für mich zur übersicht besser
// Die zahlen 0-9 im ASCII Code haben den wert 48-56
// Wenn man also 48 abzieht bekommt man den "Integerwert" und kann damit normal rechnen
int arg1 = a[j]-48;
int arg2 = b[j2]-48;
//Also rechnen wir ... stelle*stell+übertrag+das was an der ergebniss-stelle aus vorrangegangenen
//multiplikationen steht. Das erspart das zwischenspeicher der ergebnisse und das "Verschieben der Bits"
tmp = arg1*arg2+carry+z[j+j2];
//übertrag berechnen
carry = tmp / 10;
//ergebnis ohne übertrag an die vorgesehene stelle schreiben
tmp=tmp%10;
z[j+j2]=(tmp);
}
//Nun den übertrag noch verwerten
int k= j+j2;
while(carry!=0){
k++;
int t = carry % 10 +z[k];
z[k]=(t);
carry=carry/10;
}
}
//Die zahl wieder als String repräsentieren
for (int i = z.length-1; i >=0; i--) {
erg+=(char)(z[i]+48);
}
return erg;
}