Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct BigNumber diff(struct BigNumber m, struct BigNumber k)
- {
- int comp,i;
- struct BigNumber answ;
- if(m.sign==k.sign)
- {
- if(m.sign==0)
- {
- comp=compareAbs(m,k);
- if(comp==1)
- {
- answ=diff_maincase(m,k);
- if(answ.sign==1)
- {
- printf("-");
- }
- for(i=answ.length-1;i>-1;i--)
- {
- printf("%c",answ.value[i]);
- }
- return answ;
- }
- if(comp==-1)
- {
- answ=diff(k,m);
- answ.sign=1-answ.sign;
- if(answ.sign==1)
- {
- printf("-");
- }
- for(i=answ.length-1;i>-1;i--)
- {
- printf("%c",answ.value[i]);
- }
- return answ;
- }
- if(comp==0)
- {
- answ.sign=0;
- answ.length=1;
- answ.value[0]='0';
- if(answ.sign==1)
- {
- printf("-");
- }
- for(i=answ.length-1;i>-1;i--)
- {
- printf("%c",answ.value[i]);
- }
- return answ;
- }
- }
- if(m.sign==1)
- {
- m.sign=0;
- k.sign=0;
- answ=diff(m,k);
- answ.sign=1-answ.sign;
- return answ;
- }
- }
- if(m.sign!=k.sign)
- {
- if(m.sign==0)
- {
- k.sign=0;
- return sum(m,k);
- }
- if(m.sign==1)
- {
- m.sign=0;
- answ=sum(m,k);
- answ.sign=1-answ.sign;
- return answ;
- }
- }
- }
- struct BigNumber diff_maincase(struct BigNumber m, struct BigNumber k)
- {
- int i,j,x=0,y;
- struct BigNumber answ;
- answ.sign=0;
- answ.length=0;
- for(i=0;i<k.length;i++)
- {
- y=m.value[i]-k.value[i]-x;
- if(y>=0)
- {
- answ.value[i]='0'+y;
- }
- else
- {
- x=1;
- answ.value[i]='0'+10-y;
- }
- printf("%c ",answ.value[i]);
- }
- for(i=k.length-1,j=0;i>=0;i--,j++)
- {
- if(answ.value[i]!='0')
- {
- break;
- }
- }
- if(i<=0)
- {
- answ.length=1;
- }
- answ.length=m.length-j;
- return answ;
- }
- struct BigNumber sum(struct BigNumber m, struct BigNumber k)
- {
- int comp;
- struct BigNumber answ;
- if(m.sign==k.sign)
- {
- if(m.sign==0)
- {
- comp=compareAbs(m,k);
- if(comp==1)
- {
- return sum_maincase(m,k);
- }
- if(comp==-1)
- {
- return sum_maincase(k,m);
- }
- if(comp==0)
- {
- return sum_maincase(m,k);
- }
- }
- if(m.sign==1)
- {
- m.sign=0;
- k.sign=0;
- answ=sum(m,k);
- answ.sign=1-answ.sign;
- return answ;
- }
- }
- if(m.sign!=k.sign)
- {
- k.sign=1-k.sign;
- return diff(m,k);
- }
- }
- struct BigNumber sum_maincase(struct BigNumber m, struct BigNumber k)
- {
- int i,x=0;
- struct BigNumber answ;
- answ.sign=0;
- answ.length=0;
- for(i=0;i<k.length;i++)
- {
- if(-'0'+m.value[i]+k.value[i]+x<='9')
- {
- answ.value[i]='0'+m.value[i]-'0'+k.value[i]-'0'+x;
- x=0;
- }
- else
- {
- answ.value[i]=-'0'+m.value[i]+k.value[i]+x-10;
- x=1;
- }
- }
- answ.length=m.length;
- if(x!=0)
- {
- answ.value[i]='1';
- answ.length++;
- }
- return answ;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement