问题描述:
有两个存放在数组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