Des_stroka& Des_stroka::operator - (Des_stroka &two)
{
// atoi( char ); ф-я перевода из char в int
//itoa (число,куда,система_счисления); обратная ф-я
cout<<"отработала функция переопределение - в Des_stroka"<<endl;
// int a,b,c;
// char temp[11];
// a=atoi(ykaz);
// b=atoi( two.ykaz );
// c=a-b;
// itoa(c,temp,10);
// Des_stroka *tmp = new Des_stroka(temp);
int i,k,j,m=0, dot;
int p1, p2;
int a,b;
char raz[ max(DlinStr,two.DlinStr)+1]; // разность значений
char Oraz[max(DlinStr,two.DlinStr)+1];
int n=0;
char bol[ max(DlinStr,two.DlinStr)+1], men[ max(DlinStr,two.DlinStr)+1];
int who=0;
// смотрим разность знаков (если делится на 2 - знаки одинакоые)
if(ykaz[0]=='-')
n--;
else
n++;
if(two.ykaz[0]=='-')
n--;
else
n++;
if(n!=0) // если знаки одинаковые- вычитание
{
//strcmp лексикографическое сравнение строк (возвращает "0", если строки одинаковые, положительное, если первая строка больше, и отрицательное, если меньше)
if(n!=-2)
dot=0;
else
dot=1;
if( (strcmp(ykaz,two.ykaz))>0 )
{
strcpy(bol, ykaz);
strcpy(men,two.ykaz);
i=DlinStr;
k=two.DlinStr;
who++;
}
else if( (strcmp(ykaz,two.ykaz))<0 )
{
strcpy(bol, two.ykaz);
strcpy(men,ykaz);
i=two.DlinStr;
k=DlinStr;
who--;
}
else // если строчки одинаковые будет 0
{
Des_stroka *tmp = new Des_stroka('0');
return *tmp;
}
i--;
k--;
for( i,k; i>=dot && k>=dot ; i--, k-- ) // + +
{
a=bol[i]-48;
b=men[k]-48;
if(a<b) // ищем где занять
{
for(j=i-1; bol[j]<'1' ; j--);
bol[j]--;
for(j; j>i; j++)
{
bol[j]='9';
}
raz[m++]=(10+a)-b+'0';
}
else
raz[m++]=(a-b)+'0';
}
for(i; i>=dot; i--) //дописываем оставшиеся символы
{
raz[m++]=bol[i];
}
raz[m]='\0';
for(int l=0;l<m;l++)
{
cout<<raz[l];
}
cout<<endl;
if(who>0) // первая строчка была больше (число получилось положительное
{
if(n!=-2)
k=0;
else
{
Oraz[0]='-';
k=1;
}
}
else // первая строчка была меньше (число получилось отрицательное
{
if(n==2)
{
Oraz[0]='-';
k=1;
}
else
k=0;
}
i=0;
cout<<"пробую через m: "<<endl;
for(int l=1;l<m+1;l++)
{
//Oraz[k++]=raz[m-l];
Oraz[k++]=raz[m-l];
cout<<Oraz[i++];
}
Oraz[k]='\0';
}
else //знаки разные-сложение
{
i=DlinStr-1;
k=two.DlinStr-1;
if( (strcmp(ykaz,two.ykaz))>0 )
{
p1=0;
p2=1;
/* bol[0]=0;
int g=1;
for(int h=0; h<=DlinStr; h++)
{
bol[g++]=ykaz[h];
}
men[0]=0;
g=1;
for(int h=1; h<=DlinStr; h++)
{
men[g++]=ykaz[h];
}
*/
}
else
{
p1=1;
p2=0;
/* bol[0]=0;
int g=1;
for(int h=1; h<=DlinStr; h++)
{
bol[g++]=ykaz[h];
}
men[0]=0;
g=1;
for(int h=0; h<=DlinStr; h++)
{
men[g++]=ykaz[h];
}
*/
}
strcpy(bol, ykaz);
strcpy(men,two.ykaz);
cout<<endl;
for( i,k ; i>=p1 && k>=p2 ; i--, k--)
{
a=bol[i]-48;
b=men[k]-48;
if((a+b)>9)
{
raz[m++]= ( (a+b)%10)+48;
cout<<raz[m-1];
bol[i-1]++;
}
else
{
raz[m++]= a+b+48;// itoa( (a+b) , raz[m++],10);
cout<<raz[m-1];
}
}
cout<<" переписываю";
if(k<p2)
{
for(i; i>=p1; i--) //дописываем оставшиеся символы
{
a=bol[i]-48;
if(p1==0 && i==p1) // если с последним переполнение
{
if(a>9)
{
raz[m++]=a%10+48;
raz[m++]=49;
}
}
else if(p1==1 && i-1==1)
{
if(a>9)
{
raz[m++]=a%10+48;
raz[m++]=49;
}
}
else
{if(a>9)
{
raz[m++]=a%10+48;
cout<<raz[m-1];
bol[i-1]++;
}
else
raz[m++]=bol[i];
}
}
/* if(i<p1 && p1==0)
{
if(bol[i]=='1' )
raz[m++]=bol[i];
}
else
{
if( bol[i]==('1'+'-') )
raz[m++]=bol[i]-'-';
}
*/
}
else
{
for(k; k>=p2 ; k--) //дописываем оставшиеся символы
{
b=men[k]-48;
if(p2==0 && k==p2) // если с последним переполнение
{
if(b>9)
{
raz[m++]=b%10+48;
raz[m++]=49;
}
}
else if(p2==1 && k-1==1)
{
if(b>9)
{
raz[m++]=b%10+48;
raz[m++]=49;
}
}
else
{
if(b>9)
{
raz[m++]=b%10+48;
men[k-1]++;
}
else
raz[m++]=men[k];
}
}
/* if(k<p2 && p2==0)
{
if(men[i]=='1' )
raz[m++]=men[i];
}
else
{
if( men[i]==('1'+'-') )
raz[m++]=men[i]-'-';
}
*/
}
raz[m]='\0';
cout<<endl;
if(p2==1)
{
k=0;
}
else
{
Oraz[0]='-';
k=1;
}
// разбираемся со знаками
for(int l=1;l<m+1;l++)
{
//Oraz[k++]=raz[m-l];
Oraz[k++]=raz[m-l];
cout<<Oraz[k-1];
}
Oraz[k]='\0';
// for(i=DlinStr, k=1; i<DlinStr; i++, k++)
// {
// Oraz[k]=raz[i];
// }
}
for(int l=0;l<m;l++)
{
cout<<raz[l];
}
cout<<endl;
Des_stroka *tmp = new Des_stroka(Oraz);
return *tmp;
}