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?
- Rejestracja:ponad 8 lat
- Ostatnio:ponad 8 lat
- Postów:6
0
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--;
}
}
}

- Rejestracja:ponad 13 lat
- Ostatnio:prawie 3 lata
- Postów:4882
1
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)
edytowany 1x, ostatnio: fasadin
- Rejestracja:ponad 8 lat
- Ostatnio:ponad 8 lat
- Postów:8
0
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.
edytowany 1x, ostatnio: MyNameIsUnknown