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?
Jak pomnożyć dwie liczby zapisane jako string?
Wątek przeniesiony 2016-12-06 11:39 z C/C++ przez ŁF.
- Rejestracja: dni
- Ostatnio: dni
Przypomnij sobie jak wykonuje się mnożenie pisemne i dokładnie to zaimplementuj.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Pabianice
Napisz na kartce pisemne mnożenie i przełóż na kod.
Możesz poszukać czegoś od wielkich liczb. C++ ma GMP
- Rejestracja: dni
- Ostatnio: dni
- Postów: 6
Czyli musze najpierw wszystkie cyfry przeniesc na inty prawda?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 6
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: dni
- Ostatnio: dni
- Postów: 4883
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)
- Rejestracja: dni
- Ostatnio: dni
- Postów: 8
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.