Witam, celem jest pomnożenie dwóch liczb całkowitych o nieskończonej wielkości (przechowywane w stringach)
Metoda : "Pod kreską"
Mam coś takiego:
public void generateMultipleStages() {
LinkedList<String> stages = new LinkedList<String>();
LinkedList<Integer> help = new LinkedList<Integer>();
int sizeM1 = this.M1.length()-1;
int sizeM2 = this.M2.length()-1;
for (int i=sizeM1; i>=0; i--) {
int temp10 = 0;
for (int j=sizeM2; j>=0; i--) {
int temps2 = Integer.valueOf(this.M2.charAt(i));
int temps1 = Integer.valueOf(this.M1.charAt(j));
int temp = Character.getNumericValue(temps1)
* Character.getNumericValue(temps2);
int temp1;
if (temp > 9) {
temp1 = temp % 10;
help.add(temp1 + temp10);
if (temp > 9 && j == 0) {
help.add((temp - (temp%10)) / 10);
}
} else {
temp1 = temp;
help.add(temp1);
}
temp10 = (temp - temp1) / 10;
}
String ressult = "";
while (help.isEmpty() == false) {
ressult = ressult + help.getLast().toString();
help.removeLast();
}
stages.add(ressult);
}
for(int i=0; i<3; i++) {
System.out.println(stages.get(i));
}
}
Podzieliłem operację na 2 metody : jedna ma przygotować listę stringów powstałych poprzez wymnożenie każdej z cyfr liczby mnożonej przez każdą z mnożącej. Czyli jak mamy M1 * M2, to po zakończeniu pracy metody generateMultipleStages mamy mieć listę z M2 stringami. Następnie druga metoda ma je dodać do siebie, pamiętając, że każdy kolejny ma być przesunięty o jeden w lewo. Druga część będzie już prostsza, natomiast problem mam z częścią pierwszą.
Gdzieś mi się zdarzył błąd logiczny i teraz nie mogę go wykryć. Mianowicie
1) Nie zawsze dobrze bierze pod uwagę przesunięcie, tzn raz bierze, raz nie bierze.
2) Wykonuje się tylko pętla wewnętrzna i do listy stages dodaje zerowy string, a dalej coś jakby się blokuje...
Proszę o pomoc w usprawnieniu powyższego kodu.