您的位置:首页 > 其它

算法导论-二进制数组相加

2016-05-24 22:50 471 查看
算法导论-二进制数组相加

今天介绍一个算法导论中的算法,是将数组A和B中的二进制数相加,存到数组C中,需要考虑进位。

下面是具体的C语言算法:

#include

/*
二进制数组加法算法
输入:数组A, B, C和数组A的长度(A的长度等于B的长度)。
输出:将A和B数组中的二进制数据相加后存到数组C中对应的索引位置,可以有进位。
*/
void BinaryAdd(int* A, int* B, int* C, int length) {

int flag = 0;//进位标志
int key = 0;//每次计算的结果,加上进位

for (int i = 0; i < length; i++) {
key = A[i] + B[i] + flag;

//数组C存放二进制数,只能有0,1两种值
C[i] = key % 2;

//key大于1表示有进位
if (key > 1) {
flag = 1;
//没有进位,flag清零,防止下次进行错误进位
}else {
flag = 0;
}

//有进位就向前进一位
if (flag) {
C[i + 1] = 1;
}
}
}

/*显示数组元素*/
void show(int* X, int length) {
for (int i = 0; i < length; i++) {
printf(" %d", X[i]);
}
}

int main() {
int A[] = {1, 0, 0, 1};
int B[] = {1, 0, 1, 1};
int C[] = {0, 0, 0, 0, 0};
//         0  1  1  0  1
BinaryAdd(A, B, C, 4);
show(C, 5);
return 0;
}

main测试:



资料:https://yunpan.cn/cS6fR3qUUtxdA 访问密码 9fb4
欢迎指正Bug。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: