Wątek przeniesiony 2016-12-06 11:39 z C/C++ przez ŁF.

Jak pomnożyć dwie liczby zapisane jako string?

0

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?

3

Przypomnij sobie jak wykonuje się mnożenie pisemne i dokładnie to zaimplementuj.

2

Napisz na kartce pisemne mnożenie i przełóż na kod.
Możesz poszukać czegoś od wielkich liczb. C++ ma GMP

0

Czyli musze najpierw wszystkie cyfry przeniesc na inty prawda?

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--;   
		}
	}
	
}
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)

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1