算法导论 练习题 2.1-4

来源:互联网 发布:空电脑怎么装系统 知乎 编辑:程序博客网 时间:2024/05/16 23:36
#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();}
0 0