//两个任意位数的二进制整数加起来的问题,两个整数分别存储在两个数组中
static public int[] add_2(ref int[] a, ref int[] b) {
int reLength = Math.Max(a.Length, b.Length);
int[] re=new int[reLength+1];//返回计算结果的数组
int carry=0;//进位数
int temp;
int i, j, k;
for( i=a.Length-1,j=b.Length-1,k=reLength;i>=0&&j>=0;i--,j--,k--){
temp = a[i] + b[j]+carry;
if(temp>=2){
carry=1;
re[k]=temp-2;
}else{
re[k] = temp;
carry = 0;
}
}
/*
* 分为三种情况
* 1)两个数位数相同,都被加完,re的最高位加carry就可以;
* 2)a被加完,b还没有加完;
* 3)与2)情况相反。
*/
if (i >= 0)
{
while (i >= 0) {
temp = a[i] + carry;
re[k] = (temp == 2) ? 0 : temp;
carry = (temp == 2) ? 1 : 0;
i--;
k--;
}
}
else if(j>=0)
{
while (j >= 0)
{
temp = b[j] + carry;
re[k] = (temp == 2) ? 0 : temp;
carry = (temp == 2) ? 1 : 0;
j--;
k--;
}
}
re[0] = re[0] + carry;
return re;
}
static public int[] add_2(ref int[] a, ref int[] b) {
int reLength = Math.Max(a.Length, b.Length);
int[] re=new int[reLength+1];//返回计算结果的数组
int carry=0;//进位数
int temp;
int i, j, k;
for( i=a.Length-1,j=b.Length-1,k=reLength;i>=0&&j>=0;i--,j--,k--){
temp = a[i] + b[j]+carry;
if(temp>=2){
carry=1;
re[k]=temp-2;
}else{
re[k] = temp;
carry = 0;
}
}
/*
* 分为三种情况
* 1)两个数位数相同,都被加完,re的最高位加carry就可以;
* 2)a被加完,b还没有加完;
* 3)与2)情况相反。
*/
if (i >= 0)
{
while (i >= 0) {
temp = a[i] + carry;
re[k] = (temp == 2) ? 0 : temp;
carry = (temp == 2) ? 1 : 0;
i--;
k--;
}
}
else if(j>=0)
{
while (j >= 0)
{
temp = b[j] + carry;
re[k] = (temp == 2) ? 0 : temp;
carry = (temp == 2) ? 1 : 0;
j--;
k--;
}
}
re[0] = re[0] + carry;
return re;
}