⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 madd.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
#include <mp.h>m_add(a,b,c) struct mint *a,*b,*c;{	int carry,i;	int x;	short *cval;	cval=xalloc(a->len+1,"m_add");	carry=0;	for(i=0;i<b->len;i++)	{	x=carry+a->val[i]+b->val[i];		if(x&0100000)		{	carry=1;			cval[i]=x&077777;		}		else		{	carry=0;			cval[i]=x;		}	}	for(;i<a->len;i++)	{	x=carry+a->val[i];		if(x&0100000) cval[i]=x&077777;		else		{	carry=0;			cval[i]=x;		}	}	if(carry==1)	{	cval[i]=1;		c->len=i+1;	}	else c->len=a->len;	c->val=cval;	if(c->len==0) shfree(cval);	return;}madd(a,b,c) struct mint *a,*b,*c;{	struct mint x,y,z;	int sign;	x.len=a->len;	x.val=a->val;	y.len=b->len;	y.val=b->val;	z.len=0;	sign=1;	if(x.len>=0)		if(y.len>=0)			if(x.len>=y.len) m_add(&x,&y,&z);			else m_add(&y,&x,&z);		else		{	y.len= -y.len;			msub(&x,&y,&z);		}	else	if(y.len<=0)		{	x.len = -x.len;			y.len= -y.len;			sign= -1;			madd(&x,&y,&z);		}		else		{	x.len= -x.len;			msub(&y,&x,&z);		}	 xfree(c);	c->val=z.val;	c->len=sign*z.len;	return;}m_sub(a,b,c) struct mint *a,*b,*c;{	int x,i;	int borrow;	short one;	struct mint mone;	one=1; mone.len= 1; mone.val= &one;	c->val=xalloc(a->len,"m_sub");	borrow=0;	for(i=0;i<b->len;i++)	{	x=borrow+a->val[i]-b->val[i];		if(x&0100000)		{	borrow= -1;			c->val[i]=x&077777;		}		else		{	borrow=0;			c->val[i]=x;		}	}	for(;i<a->len;i++)	{	x=borrow+a->val[i];		if(x&0100000) c->val[i]=x&077777;		else		{	borrow=0;			c->val[i]=x;		}	}	if(borrow<0)	{	for(i=0;i<a->len;i++) c->val[i] ^= 077777;		c->len=a->len;		madd(c,&mone,c);	}	for(i=a->len-1;i>=0;--i) if(c->val[i]>0)				{	if(borrow==0) c->len=i+1;					else c->len= -i-1;					return;				}	shfree(c->val);	return;}msub(a,b,c) struct mint *a,*b,*c;{	struct mint x,y,z;	int sign;	x.len=a->len;	y.len=b->len;	x.val=a->val;	y.val=b->val;	z.len=0;	sign=1;	if(x.len>=0)		if(y.len>=0)			if(x.len>=y.len) m_sub(&x,&y,&z);			else			{	sign= -1;				msub(&y,&x,&z);			}		else		{	y.len= -y.len;			madd(&x,&y,&z);		}	else	if(y.len<=0)		{	sign= -1;			x.len= -x.len;			y.len= -y.len;			msub(&y,&x,&z);		}		else		{	x.len= -x.len;			madd(&x,&y,&z);			sign= -1;		}	if(a==c && x.len!=0) xfree(a);	else if(b==c && y.len!=0) xfree(b);	else xfree(c);	c->val=z.val;	c->len=sign*z.len;	return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -