Witam. Po dłuższej przerwie od programowania, postanowiłem że stworzę program wykonujący operacje arytmetyczne na bardzo dużych liczbach całkowitych.
Zacząłem od dodawania. Plan był taki, że funkcja dostaje dwa stringi i zamienia je na tablice intów. Przykład:
238742138745421423545435436 | 42938421398434214213421346346
238742138 745421423 545435436 | 42 938421398 434214213 421346346
A potem odpowiednio je dodać (jeśli wynik jest większy od 1000000000 to jedynkę dodać to poprzedniej komórki.
Więc spróbowałem napisać tę zamianę na int'y. Ciężka to była przeprawa, na razie mam taki kod:
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
void dodawanie(string a, string b);
int main()
{
string a,b;
cin>>a>>b;
dodawanie(a,b);
return 0;
}
void dodawanie(string a, string b)
{
int dlugoscA = a.length(); int dlA = dlugoscA%9;
int dlugoscB = b.length(); int dlB = dlugoscB%9;
int maksdl = a.length();
if(b.length()>maksdl) maksdl = b.length();
int komorek = (maksdl/9)+1;
int liczba[komorek], arg1[komorek], arg2[komorek]; for(int i=0; i<komorek; i++) {liczba[i]=0; arg1[i]=0; arg2[0];}
int licznikcyfr_A=dlA;
int licznikcyfr_B=dlB;
for(int i=0; i<komorek; i++)
{
if(i==0)
{
string resztaA="0";
for(int j=0; j<dlA; j++)
{
resztaA+=a[j];
}
string resztaB="0";
for(int j=0; j<dlB; j++)
{
resztaB+=b[j];
}
arg1[0]=atoi(resztaA.c_str());
arg2[0]=atoi(resztaB.c_str());
}
else
{
string rA="0";
for(int j=(licznikcyfr_A+1); j<=(licznikcyfr_A+9); j++)
{
rA+=a[j];
}
string rB="0";
for(int j=(licznikcyfr_B+1); j<=(licznikcyfr_B+9); j++)
{
rB+=b[j];
}
arg1[i]=atoi(rA.c_str());
arg2[i]=atoi(rB.c_str());
licznikcyfr_A+=9; licznikcyfr_B+=9;
}
}
for(int i=0; i<komorek; i++)
{
cout<<arg1[i];
} cout<<" ";
for(int i=0; i<komorek; i++)
{
cout<<arg2[i];
} cout<<endl;
}
(Na końcu test, czy dane zostały poprawnie zamienione) I tu pojawia się problem, ponieważ program jakby pomija niektóre cyfry, albo zastępuje je zerami.
INPUT: 453187949023468921364897132 8746821376489213648921649824
OUTPUT: 053187949023468921364897132 846821376489213648921649824
Domyślam się, w czym mniej więcej tkwi problem, ale odpowiednie poprawki w kodzie wykraczają poza możliwości mojego mózgu...
Z góry dzięki za pomoc.