molodzo
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Привет! Объясните, пожалуйста, мою ошибку. Задача: Создать класс для работы с длинными числами(сложение, умножение, деление и вычитание). Также нужно выделить память ДИНАМИЧЕСКИ и освободить деструктором. А у меня при выделении памяти динамич. способом программа начинает неправильно считать, а когда делаю обычным способом все нормально. Помогите исправить ошибку... #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <string.h> class GlavClass { public: int n, p; void input(); void max(int,int); void done_1(int,int,int); void done_2(int,int); void done_3(int,int); void output(int,int); }; int *a = new int[700]; // dinamicheski videlennay pamyat' int *b = new int[700]; int *c = new int[700]; // vvod chisel void GlavClass::input() { char *Temp, s[100]; int i, j, len_1, len_2, pos; cout<<"1 - vichitane; 2 - slogenie; 3 - ymnogenie: \n"; cin>>n; cout<<endl; cout<<"Vvedite 1-e chislo "; cin>>s; len_1=strlen(s); i=len_1-1; Temp=""; pos=0; while (i>=0) { *Temp=s[i]; a[pos]=atoi(Temp); pos++; i--; } cout<<"Vvedite 2-e chislo "; cin>>s; len_2=strlen(s); i=len_2-1; Temp=""; pos=0; while (i>=0) { *Temp=s[i]; b[pos]=atoi(Temp); pos++; i--; } max(len_1, len_2); } // poisk naibolchego chisla void GlavClass::max(int len_1, int len_2) { int i; if (len_1>len_2) { p=1; if (n==1) done_1(len_1, len_2, p); if (n==2) done_2(len_1, len_2); if (n==3) done_3(len_1, len_2); return; } if (len_1<len_2) { p=2; if (n==1) done_1(len_1, len_2, p); if (n==2) done_2(len_1, len_2); if (n==3) done_3(len_1, len_2); return; } p=1; for (i=len_1-1; i>=0; i--) { if (a[i]<b[i]) { if (n==1) { p=1; done_1(len_1, len_2, p); } if (n==2) { if (a[i]<0) { p=2; done_2(len_1, len_2); } else { p=1; done_2(len_1, len_2); } } if (n==3) { if (a[i]<0) { p=2; done_3(len_1, len_2); } else { p=1; done_3(len_1, len_2); } } return; } if (a[i]>b[i]) { if (n==1) done_1(len_1, len_2, p); if (n==2) done_2(len_1, len_2); if (n==3) done_3(len_1, len_2); return; } } if (n==1) done_1(len_1, len_2, p); if (n==2) done_2(len_1, len_2); if (n==3) done_3(len_1, len_2); return; } // vichitanie chisel void GlavClass::done_1(int len_1, int len_2, int p) { int i, w, k; if (len_1>len_2) k=len_1; else k=len_2; if (p==2) for (i=0; i<k; i++) { w=a[i]; a[i]=b[i]; b[i]=w; } for (i=0; i<k; i++) { c[i]=a[i]-b[i]+c[i]; if (c[i]<0) { c[i+1]-=1; c[i]+=10; } } output(k,p); } // slogenie chisel void GlavClass::done_2(int len_1, int len_2) { int i,k; if (len_1>len_2) k=len_1; else k=len_2; for (i=0; i<k; i++) { c[i]=a[i]+b[i]+c[i]; if (c[i]>9) { c[i+1]+=(c[i]/10); c[i]%=10; } } output(k,p); } // ymnogenie chisel void GlavClass::done_3(int len_1, int len_2) { int i,k,j; if (len_1>len_2) k=len_1; else k=len_2; for(i=0; i<len_1; i++) for(j=0; j<len_2; j++) { c[i+j]=c[i+j]+a[i]*b[j]; if (c[i+j]>9) { c[i+j+1]+=(c[i+j]/10); c[i+j]%=10; } } output(k,p); } // vivod resultata void GlavClass::output(int k, int p) { int i; while (c[k]==0 && k>0) k--; if (p==2) cout<<"-"; for (i=k; i>=0; i--) cout<<c[i]; getch(); return; } int main() { GlavClass NewOb; // constructor NewOb.input(); } |