算法导论 2.1.4

来源:互联网 发布:剑网三琴萝捏脸数据 编辑:程序博客网 时间:2024/05/18 01:21

问题描述:

有两个存放在数组A和数组B的N位二进制,考虑它们相加问题。两个整数的和以二进制形式存放在一个具有(n+1)个元素的数组C中。

问题思考:

假设两个二进制数组,高位在前,低位在后,从后往前加--即从高位往地位加,循环顺序则为从大到小(n-1到0)。c[i]=a[i]+b[i],这样写当a[0]=1,b[0]=1时,还有个进位无法存放,当然可以printf("%d",carry_flag);(carry_flag为)进位标记。这样写,不符合题意,未把carry_flag放入数组。所以c[i+1]=a[i]+b[i]。同时每次应该加上进位。即c[i]=(a[i]+b[i]+carry_flag)%2。

代码如下:

  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#include<stdio.h>
void binary_add(int *a,int *b,int *c,int length){
int carry_flag=0;
for(int i=length-1;i>=0;i--){
int temp=a[i]+b[i]+carry_flag;
if(temp>1)
carry_flag=1;
else
carry_flag=0;
c[i+1]=temp%2;
}
if(carry_flag==1)
c[0]=carry_flag;
}
int main(){
int a[]={1,0,0,1};
int b[]={1,1,1,1};
int length=sizeof(a)/sizeof(a[0]);
int c[length+1];
for(int i=0;i<=length;i++)
c[i]=0;
binary_add(a,b,c,length);
for(int i=0;i<=length;i++)
printf("%d",c[i]);
return 0;
}
运行结果11000

0 0
原创粉丝点击