Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef BIGNUMBER_H_INCLUDED
- #define BIGNUMBER_H_INCLUDED
- #include <iostream>
- #include <algorithm>
- #include <string.h>
- using namespace std;
- class BigNumber
- {
- private:
- string n;
- public:
- BigNumber(string _n); ///Constructor
- string toStr(); ///Devolver string
- BigNumber operator*(BigNumber &b); ///Operador multiplicar
- };
- BigNumber::BigNumber(string _n)
- {
- this->n = _n;
- }
- string BigNumber::toStr()
- {
- return this->n;
- }
- BigNumber BigNumber::operator*(BigNumber &num)
- {
- string sa = this->toStr();
- string sb = num.toStr();
- char *a = (char*)sa.c_str();
- char *b = (char*)sb.c_str();
- int t1 = sa.size(), t2 = sb.size();
- int tam = t1+t2+1; ///+1 changui
- int res[tam], p, i, j;
- for(i=0; i<tam; i++)
- res[i] = 0;
- for(i=0; i<t1/2; i++)
- {
- swap(a[i], a[t1-1-i]);
- swap(b[i], b[t2-1-i]);
- }
- for(i=0; i<t1; i++)
- {
- for(j=0; j<t2; j++)
- {
- p = (a[i]-'0')*(b[j]-'0');
- res[i+j] += p;
- }
- }
- for(i=0; i<tam-1; i++)
- {
- if(res[i] > 9)
- {
- res[i+1] += res[i]/10;
- res[i] %= 10;
- }
- }
- int maxPos = tam-1;
- while(maxPos >= 0 && res[maxPos] == 0)
- maxPos--;
- char r[maxPos+2];
- for(i=maxPos; i>=0; i--)
- r[maxPos-i] = (res[i]+'0');
- r[maxPos+1] = 0;
- return string(r);
- }
- ostream &operator<<(ostream &out, BigNumber &num)
- {
- return out << num.toStr();
- }
- #endif // BIGNUMBER_H_INCLUDED
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement