算法导论 练习题 2.1-4

时间:2023-02-03 19:02:35
#include <stdio.h>
#define MAXLEN 100

//进位函数,返回更新后数组长度
int binCarry(int a[],int len)
{
int carry=0,l=len;
for(int i=0;i<len;i++)
{
a[i]+=carry;
carry=0;
if(a[i]>1)
{
carry+=a[i]/2;
a[i]%=2;
if(i==len-1)
{
a[len]=1;
l++;
}
}
}
return l;
}

//二进制相加函数,返回“和数组”长度
int binAdd(int a[],int b[],int sum[],int alen,int blen)
{
int i,j,len=alen;
//两个二进制相加,先不进位
for(i=0,j=0;i<alen&&j<blen;i++,j++)
{
sum[i]=a[i]+b[j];
}
if(i>=alen && j< blen)
{
while(j<blen)
{
sum[j]=b[j];
j++;
}
len=blen;
}
if(j>=blen && i<alen)
{
while(i<alen)
{
sum[i]=a[i];
i++;
}
len=alen;
}
//开始进位
len=binCarry(sum,len);
return len;
}

int main()
{
//倒序存放二进制数,a=11001,b=10111
int a[MAXLEN]={1,0,0,1,1};
int b[MAXLEN]={1,1,1,0,1};
int i,len;
int sum[MAXLEN];
len=binAdd(a,b,sum,5,5);
//倒序打印结果
for(i=len-1;i>=0;i--)
{
printf("%d",sum[i]);
}
getchar();
}