Witajcie, czy ktoś ma pomysł jak pomnożyć 2 liczby w stringach? Np. "20" i"5", żeby wyszlo "100"? Chcialbym żeby to też dzialalo dla dlugich liczb. Można włączyć tylko <iostream> i <cstring>. Jakieś pomysły?
Przypomnij sobie jak wykonuje się mnożenie pisemne i dokładnie to zaimplementuj.
Napisz na kartce pisemne mnożenie i przełóż na kod.
Możesz poszukać czegoś od wielkich liczb. C++ ma GMP
Czyli musze najpierw wszystkie cyfry przeniesc na inty prawda?
To jest kod dodawania stringów. Czy ktoś może powiedzieć co jest źle ?
#include <iostream>
#include <string>
using namespace std;
//------------------------
int getCarry (int num) {
int carry = 0;
if (num >= 10) {
while(num != 0) {
carry = num % 10;
num = num / 10;
}
}
else
carry = 0;
return carry;
}
//-------------
int main () {
string a;
string b;
cin >> a >> b;
int al = a.length();
int bl = b.length();
int sum[100000];
int c[10000];
int d[10000];
for (int i = 0; i < a.length(); i++) {
c[i] = a[i] - '0';
cout << c[i];
}
cout << endl;
for (int j = 0; j < b.length(); j++) {
d[j] = b[j] - '0';
cout << d[j];
}
cout << endl << endl;
if (al >= bl) {
for(int i = 0; i <= al; i++)
sum[i] = 0; // zerujemy tablicę zsumowaną "pod kreską"
int k = al - 1;
int l = bl - 1;
int n;
int carry = 0;
for (k = al - 1; k >= 0; k--) {
n = a[k] + b[l] + carry;
sum[k] = n % 10;
carry = getCarry(n);
cout << sum[k];
l--;
}
}
else {
for(int i = 0; i <= bl; i++)
sum[i] = 0; // zerujemy tablicę zsumowaną "pod kreską"
int k = al - 1;
int l = bl - 1;
int n;
int carry = 0;
for (l = bl - 1; l >= 0; l--) {
n = a[k] + b[l] + carry;
sum[l] = n % 10;
carry = getCarry(n);
cout << sum[l];
l--;
}
}
}
int sum[100000];
int c[10000];
int d[10000];
stackoverflow exception. To jest Twoj blad glowny. Poczytaj o pamieci na stosie i na stercie
Od razu poczytaj o smart pointerach bys nie uzywal new (uzywanie golego new w C++ jest to antyidom)
na reszte nie patrze (kod nie jest czytelny, do tego bez sensu nazwane zmienne, nie jest podzielony na male funkcje tylko jakies duze byki co cos
robia)
int sum[100000];
int c[10000];
int d[10000];
Au... deklaracja na sztywno... Zaraz ci poprawię co tam masz za bajzel, albo pokażę gdzie masz błędy.
Kumplu:
n = c[k] + d[l] + carry;
zamiast n = a[k] + b[l] + carry;
to jest pierwszy błąd.
Drugi:
```cpp
cout << sum[k];
Wypisujesz od tyłu, czyli u ciebie 20 + 10 = 03;
Poza tym widzę jeszcze kilka błędów, zaraz potestuję dalej.