c语言如何实现两个数相加并将进位也当做高位的加数,最高位的进位当做最低位的加数
c语言如何实现两个数相加并将进位也当做高位的加数,最高位的进位当做最低位的加数
程序代码://下面的代码可以用数组进行二进制数的逐位相加。至于楼主的要求,只要在加法运算结束后检查最高位,然后采取相应处理就可以了。
//楼主先自己看看,不明白我再给你解释。代码写的可能有点啰嗦,楼主将就着看吧
#include <stdio.h>
#include <string.h>
void reverse(char * a) {
int i = 0, j = strlen(a) - 1;
char k;
while (i < j) {
k = a[i];
a[i++] = a[j];
a[j--] = k;
}
}
void add_binary(char * r, char * a, char * b) {
char i = 0, c = '0', la = strlen(a), lb = strlen(b);
reverse(a); // 反转数组,方便进行加法运算
reverse(b);
if (la < lb) { // 对齐两个数组的长度
memset(&a[la], '0', lb - la);
} else {
memset(&b[lb], '0', la - lb);
}
while (a[i]) { // 对两个二进制数逐位相加
if (a[i] == b[i]) {
r[i] = c;
c = a[i];
} else {
r[i] = c == '1' ? '0' : '1';
}
i++;
}
if (c == '1') {
r[i] = '1';
}
reverse(r);
if (la < lb) { // 恢复在进行对齐时修改过的数组的长度
a[la] = 0;
} else {
b[lb] = 0;
}
}
int main() {
int i, j;
char ia[32] = {0}, ja[32] = {0}, suma[33] = {0};
printf("Give me 2 integers: ");
scanf("%d %d", &i, &j);
itoa(i, ia, 2);
itoa(j, ja, 2);
add_binary(suma, ia, ja);
printf("%s\n", suma);
return 0;
}