有两个各存放在数组A和B中的n位二进制整数,考虑它们的相加问题。两个整数的和以二进制的形式存放在具有(n+1)个元素的数组C中。
#include<stdio.h>
#include<memory.h>
#include<malloc.h>
#define MAX(a,b) ((a)>(b)?(a):(b))
void addOneArray(int a[], int *sum, int ai, int si, int base)
{
sum[si] += a[ai];
if(sum[si] >= base)
{
sum[si] %= base;
sum[si-1] += 1;
}
}
void arrayAdd(int a[], int b[], int sum[],
int aLen, int bLen, int sumLen, int base)
{
int ai = aLen - 1;
int bi = bLen - 1;
int si = sumLen - 1;
while(0 <= ai && 0 <= bi)
{
addOneArray(a, sum, ai, si, base);
addOneArray(b, sum, bi, si, base);
ai--;
bi--;
si--;
}
while(0 <= ai)
{
addOneArray(a, sum, ai, si, base);
ai--;
si--;
}
while(0 <= bi)
{
addOneArray(b, sum, bi, si, base);
bi--;
si--;
}
}
int main()
{
int index = 0;
int a[] = {1, 1, 1, 1, 1, 1};
int b[] = {1, 1, 1, 1, 1};
int aLen = sizeof(a) / sizeof(int);
int bLen = sizeof(b) / sizeof(int);
int sumLen = MAX(aLen, bLen) + 1;
int *sum = NULL;
sum = (int*)malloc(sumLen * sizeof(int));
if(NULL == sum)
{
printf("malloc sum failed.");
return -1;
}
memset(sum, 0, sumLen);
printf("arr a is \t");
for(index = 0; index < aLen; index++)
{
printf("%d ", a[index]);
}
printf("\n");
printf("arr b is \t");
for(index = 0; index < bLen; index++)
{
printf("%d ", b[index]);
}
printf("\n");
arrayAdd(a, b, sum, aLen, bLen, sumLen, 2);
printf("arr a+b is \t");
for(index = 0; index < sumLen; index++)
{
printf("%d ", sum[index]);
}
printf("\n");
free(sum);
return 0;
}