算法导论 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;}
0 0
- 算法导论 2.1-4
- 算法导论2.1-4
- 算法导论2.1-4
- 算法导论@2.1-4
- 算法导论 2.1.4
- 算法导论 2.1-4
- 《算法导论》练习题 2.1-4
- 算法导论 习题2.1-4
- 算法导论习题2.1-4
- 算法导论 练习题 2.1-4
- 算法导论 课后习题 2.1-4
- 算法导论学习2.1-4 二进制加法
- 算法导论习题解析----2.1-4
- 算法导论——2.1-4
- 算法导论习题自做2.1-4
- 算法导论 2.1-2
- 算法导论 2.1-3
- 算法导论 练习 2.1
- vim的配置文件
- Android设计模式之MVP
- 堆排序模版
- sass 的下载、安装、初次使用、入门
- HTTP_USER_AGENT获取用户客户端信息
- 算法导论 2.1.4
- POJ 3086 Triangular Sums 再想想
- [置顶] 倾情大奉送--Spark入门实战系列
- 个人笔记 IOS——Android动画
- 初学者使用IntellJ IDEA建立Struts2项目
- php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
- leetcode 371. Sum of Two Integers
- Java Resource路径小结
- git 使用方法