public class BinaryAdd {
public static void main(String[] args) {
binaryAdd_ex(new int[]{1,1,1,1,0}, new int[]{1,1,1,1,1});
}
public static void binaryAdd(int A[], int B[]) {
int aLength = A.length;
if (aLength != B.length && aLength < 1) {
return;
}
int C[] = new int[aLength + 1];
for (int i = 0; i < aLength; i++) {
int x = C[i];
C[i] = A[i] + B[i];
if (C[i] > 1) {
C[i + 1] = 1;
C[i] = 0;
}
C[i] = C[i] + x;
if (C[i] > 1) {
C[i + 1] = 1;
C[i] = 0;
}
}
for (int c : C) {
System.out.print(c + " ");
}
}
public static void binaryAdd_ex(int A[], int B[]) {
int aLength = A.length;
if (aLength != B.length && aLength < 1) {
return;
}
int C[] = new int[aLength + 1];
for (int i = aLength - 1; i >= 0; i--) {
int x = C[i + 1];
C[i + 1] = A[i] + B[i];
if (C[i + 1] > 1) {
C[i] = 1;
C[i + 1] = 0;
}
C[i + 1] = C[i + 1] + x;
if (C[i + 1] > 1) {
C[i] = 1;
C[i + 1] = 0;
}
}
for (int c : C) {
System.out.print(c + " ");
}
}
}
使用进位标识符
public static void binaryAdd(int A[], int B[]) {
int aLength = A.length;
if (aLength != B.length && aLength < 1) {
return;
}
int flag = 0;
int key = 0;
int C[] = new int[aLength + 1];
for (int i = 0; i < aLength; i++) {
if ((key = (A[i] + B[i] + flag)) > 1) {
flag = 1;
} else flag = 0;
C[i] = key % 2;
}
if (flag > 0) {
C[aLength] = 1;
}
for (int c : C) {
System.out.print(c + " ");
}
}