低位在下标为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;
}
两个数进行比较
先比长度,长度相同,从高位到低位进行比较。