二进制相加问题
题干书上有,此处省略!!
分析:
- 首先考虑一位二进制相加的情况:有0+0、0+1、1+1三种情况
- 注意到,1+1时等于二,对于二进制来说就产生了进位,即进位为1,此处为零
- 所以在设计算法时要有一个变量储存进位值
- 总的加减用循环,进位值用if条件语句判断
此处贴上代码仅供参考:
#include<stdio.h>
void Line(int number1[],int number2[],int number3[]);
int main(void) {
int number1[10]={0,1,0,0,1,1,0,1,1,1};
int number2[10]={0,1,0,0,1,1,0,1,1,1};
int number3[11];
Line(number1,number2,number3);
}
void Line(int number1[],int number2[],int number3[]) {
int lastjin;
for(int i=9;i>=0;i--) {
if((number1[i]+number2[i]+lastjin)>=2){
number3[i+1]=(number1[i]+number2[i]+lastjin)%2;
lastjin=1;
} else {
number3[i+1]=(number1[i]+number2[i]+lastjin);
lastjin=0;
}
}
number3[0]=lastjin;
/*for(int i=0;i<=10;i++) {
printf("%d ",number3[i]);
}*/
}
在for循环中添加if条件语句判断当前位的二进制数和前一位的进位值相加是否>=2,如>=2,则往高位进1,即让lastjin=1,没有这往高位进0,即让lastjin=0;
最后,由于number3是n+1位,而number1和number2是n位,所以number3的最后一位是没有对应的number1和number2相加的,他的值只能是number1和number2最后一位的进位值。
输出示例如下:
//鄙人是博客新手,暑期会一直学算法导论,并发布自己写的习题答案的,如有错误
请各位大哥大姐指出,不胜感激
有疑问的也可以提出来,大家一起解决,一起学习,一起进步