I'm feeling too lazy to write a documentation sorta thing on it right now but for the start:
-> Suppose a is your BigNum. You initialize it with BigNum a("20000",5); Since 5 is the length of the number; You can also initialize it like BigNum a; Then it has nothing in it and it's size is 0; To add you can use both Strings (not the C++ string class, not yet) which are char * or another BigNum. But you must use a BigNum for storing the result. It uses a global array of 1000000 size for temp usage. I'm thinking of binding it inside the object but RTE errors are really boring. Example: a.add("200",c); a.add("200",a); a.add(a,a);
/* --------------------------> BISMILLAHIR RAHMANIR RAHIM <------------------------------ */ /* ------------------------> Tafhim Ul Islam [ CSE-09@IIUC ] <--------------------------- */ #include <cstdio> #include <iostream> #include <cmath> #include <cstring> #include <string> #include <map> #include <stack> #include <queue> #include <cstdlib> #include <vector> #include <climits> #include <set> #define MI INT_MAX #define ULONG unsigned long long #define LLONG long long #define swap(a,b) {int t=a ; a=b ; b=t; } #define sz(a) sizeof(a) #define FOR(i, a, b) for (i=a ; i<b ; i++) #define QSORT(a,n,s,f) qsort(a,n,sizeof(s),f) using namespace std; char res[1000000]; class BigNum { private: char *num; int sLen; public: bool add(BigNum *a, BigNum *stor) { // a points to the other number, stor points to the location // where the result is stored int i, j, k, car=0, cur; for (i=sLen-1, j=(a->length())-1, k=0 ; i>=0 || j>=0 ; i--, j--, k++) { cur = (i>=0?num[i]:'0') + (j>=0?a->num[j]:'0') - ('0'+'0') + car; // Turning it into integer, 2 '0's because 2 ASCII char if (cur>9) { car = 1; cur = cur - 10; } else { car = 0; } res[k]=cur+'0'; } if (car) { res[k++]='1'; } for (--k, i=0 ; k>=0 ; k--, i++) { stor->num[i]=res[k]; } stor->num[i]='\0'; stor->sLen=i; return true; } bool add(char *a, BigNum *stor) { // a points to the other number, stor points to the location // where the result is stored int i, j, k, l, car=0, cur; for (l=0 ; a[l]=='0' ; l++); for (i=sLen-1, j=strlen(a)-1, k=0 ; i>=0 || j>=l ; i--, j--, k++) { cur = (i>=0?num[i]:'0') + (j>=l?a[j]:'0') - ('0'+'0') + car; // Turning it into integer, 2 '0's because 2 ASCII char if (cur>9) { car = 1; cur = cur - 10; } else { car = 0; } res[k]=cur+'0'; } if (car) { res[k++]='1'; } for (--k, i=0 ; k>=0 ; k--, i++) { stor->num[i]=res[k]; } stor->num[i]='\0'; stor->sLen=i; return true; } int length() { return sLen; } BigNum(char *a, int size) { num = new char [size]; int i, k; for (i=0 ; a[i]!='\0' && a[i]=='0' ; i++); for (i, k=0 ; a[i]!='\0' ; i++, k++) { num[k]=a[i]; } num[k]='\0'; sLen=k; } void print() { printf("%s\n",num); } BigNum() { num = new char [0]; sLen = 0; } ~BigNum() { free(num); sLen=0; } }; int main() { BigNum a("100",3), b("200",3), c; }
No comments:
Post a Comment
Post your comment here. If you want to say something about programming problems, scripts, software etc, please try to be as descriptive as possible.