低位在下标为0的数组那,代码都是用了繁凡的ACM模板。
c = a+b
g||i<a.len||i<b.len 这个设定是直的好,再也不用担心两个数组的长度了,也不用担心c的数组长度。
{
int c[N];
clen = 0;
for(int i=0,g=0; g||i<a.len||i<b.len ; i++)
{
int x=g;
if(i<a.len) x+=a[i];
if(i<b.len) x+=s[i];
c[clen++] = x%10;
g=x/10;
}
return c;
}
c = a-b
{
int c[N];
int clen=0;
int x;
for (int i=0,g=0;i<alen ; i++)
{
x=a[i]-g;
if (i<b.len) x-=b[i];
if (x>=0) g=0;
else{
x+=10;
g=1;
}
c[clen++]=x;
}
while (clen>1 && !s[len-1]) len--;
return c;
}
c = a*b
{
int c[N];
int clen = alen+blen;
for(int i=0;i<alen;i++)
{
for(int j=0;j<blen;j++)
{
c[i+j]+=a[i]*b[j];
}
}
for(int i=0;i<clen-1;i++)
{
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
while(clen >1 && !c[clen-1]) clen--;
return c;
}
先比长度,长度相同,从高位到低位进行比较。