#include #include #include #define MAX_DLUG 1100 #define BASE 10 #define id if(0) typedef struct { int dl; int t[MAX_DLUG]; } bignum; bignum *init() { bignum *a = (bignum *) malloc (sizeof(bignum)); a->dl = 0; memset(a->t, 0, sizeof(int)*MAX_DLUG); return a; } void fromstring(bignum *a, char *s) { int i; memset(a->t, 0, sizeof(int) * MAX_DLUG); a->dl = strlen(s); for (i=0; idl; i++) { a->t[a->dl-i-1] = s[i] - '0'; } } void wypisz(bignum *a) { int i; for (i=a->dl-1; i>=0; i--) { printf("%d", a->t[i]); } if (!a->dl) printf("0"); printf("\n"); } void dodaj (bignum *a, bignum *b, bignum *c) { int i; c->dl = (a->dl > b->dl ? a->dl : b->dl); memset(c->t, 0, sizeof(int) * MAX_DLUG); for (i=0; idl; i++) { c->t[i] += (a->t[i] + b->t[i]); while (c->t[i] >= BASE) { c->t[i+1]++; c->t[i] -= BASE; } } if (c->t[c->dl]) c->dl++; } void odejmij (bignum *a, bignum *b, bignum *c) { int i; memset(c->t, 0, sizeof(int) * MAX_DLUG); /* if (comp(a,b) == -1) { printf("proba odjecia wiekszej od mniejszej\n"); return; } */ c->dl = a->dl; for (i=0; idl; i++) { c->t[i] += (a->t[i] - b->t[i]); while (c->t[i] < 0) { c->t[i+1]--; c->t[i] += BASE; } } while (c->dl >0 && !(c->t[c->dl-1])) { c->dl--; } } void mnoz (bignum *a, bignum *b, bignum *c) { int i,j; memset(c->t, 0, sizeof(int) *MAX_DLUG); c->dl = a->dl + b->dl; for (i=0; idl; i++) { for (j=0; jdl; j++) { c->t[i+j] += (a->t[i] * b->t[j]); c->t[i+j+1] += (c->t[i+j] / BASE); c->t[i+j] %= BASE; } } while (c->dl >0 && !(c->t[c->dl-1])) { c->dl--; } } int i,j,k; int T,I; char str[2000]; int lena,lenb,lenc,lene; int dlug,dlug2; char la[1100], lb[1100]; bignum *a,*b,*c,*d,*e; int max (int a, int b) { return (a > b ? a : b); } void dod() { int i,j; for (i=0; str[i]!='+'; i++) { la[i] = str[i]; } la[i]=0; for (j=i+1; jdl) lenc = c->dl; else lenc = 1; dlug = max(max(lena,lenb+1),lenc); for (i=0; idl) lenc = c->dl; else lenc = 1; dlug = max(max(lena,lenb+1),lenc); for (i=0; idl) lenc = c->dl; else lenc = 1; dlug = max(max(lena,lenb+1),lenc); for (i=0; i 1) { dlug2 = lenb+1; dd[0] = lb[lenb-1]; dd[1] = 0; fromstring(d,dd); mnoz (a,d,e); if (e->dl) lene = e->dl; else lene = 1; if (lene>dlug2) { dlug2 = lene; } for (i=0; i=0; i--) { dd[0] = lb[i]; dd[1] = 0; fromstring(d,dd); mnoz (a,d,e); if (e->dl) lene = e->dl; else lene = 1; ilespacji = 0; for (j=0; j