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

📄 大数相减 .txt

📁 里面包括了一些acm比赛是常用的函数
💻 TXT
字号:
//大数相减 
//调用形式:N.Sub(A),返回值:N-A 
//若两大数符号相同,其值相减,否则改变参数符号再调用大数相加函数 
/******************************************************************/ 
例如: 
A B C 
- D E 
-------------- 
= F G H 

其中,若C>=E,则H=C-E,carry(借位标志)=0 
若C<E,则H=C-E+0x100000000,carry=1 

若B-carry>=D,则G=B-carry-D,carry=0 
若B-carry<D,则G=B-carry-D+0x10000000,carry=1 

若carry=0,则F=A 
若carry=1,A>1,则F=A-1 
若carry=1,A=1,则F=0 
/*****************************************************************/ 
CBigInt CBigInt::Sub(CBigInt& A) 
{ 
CBigInt X; 
if(m_nSign==A.m_nSign) 
{ 
X.Mov(*this); 
int cmp=X.Cmp(A); 
if(cmp==0){X.Mov(0);return X;} 
int len,carry=0; 
unsigned __int64 num; 
unsigned long *s,*d; 
if(cmp>0) 
{ 
s=X.m_ulvalue; 
d=A.m_ulvalue; 
len=X.m_nLength; 
} 
if(cmp<0) 
{ 
s=A.m_ulvalue; 
d=X.m_ulvalue; 
len=A.m_nLength; 
X.m_nSign=1-X.m_nSign; 
} 
for(int i=0;i<len;i++) 
{ 
if((s[i]-carry)>=d[i]) 
{ 
X.m_ulvalue[i]=s[i]-carry-d[i]; 
carry=0; 
} 
else 
{ 
num=0x100000000+s[i]; 
X.m_ulvalue[i]=(unsigned long)(num-carry-d[i]); 
carry=1; 
} 
} 
while(X.m_ulvalue[len-1]==0)len--; 
X.m_nLength=len; 
return X; 
} 
else{X.Mov(A);X.m_nSign=1-X.m_nSign;return Add(X);} 
} 

⌨️ 快捷键说明

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