51,411
社区成员
发帖
与我相关
我的任务
分享import java.util.*;
public class PracticeInClass3 {
public static void main(String[] args){
Scanner s = new Scanner(System.in);
System.out.println("请输入数组长度n:");
int n = s.nextInt();
int A[] = new int[n];
int B[] = new int[n];
System.out.println("请输入数组A:");
while (s.hasNext()) {
for (int i = 0; i < n; i++) {
A[i] = s.nextInt();
}
System.out.println("请输入数组B:");
for (int i = 0; i < n; i++) {
B[i] = s.nextInt();
}
BinaryAddition(n,A,B); //调用BinaryAddition()方法对AB数组进行二进制相加
}
}
public static void BinaryAddition(int n,int A[],int B[]){
boolean flag = false; //定义判断AB数组是否为二进制数组的布尔常量flag
for(int i = 0; i < n; i++){
if((A[i] == 0 || A[i] == 1) && (B[i] == 0 ||B[i] == 1)){
flag = true; //如果AB两个数组的第i个元素都为0或者1,则此时AB都是二进制数组
}
else{
flag = false; //如果不满足二进制数组的话,将flag变为false
System.out.println("输入数组有误!"); //输出错误
break; //退出循环
}
}
if(flag == true){ //当AB数组都为二进制数组时才能进行二进制相加
System.out.println("A数组为:" + Arrays.toString(A));
System.out.println("B数组为:" + Arrays.toString(B));
int C[] = new int[n + 1]; //定义新数组C[]
int carry = 0; //定义进位标志carry
int c = 0; //定义判断C数组中元素和进位标志的中间变量c
for(int i = n - 1; i >= 0; i--){ //从最高位到最低位循环运算
c = A[i] + B[i] + carry; //C数组中每个元素等于AB数组中对应的元素与进位标志之和
switch (c){
case 0: { //当c等于0时
C[i + 1] = 0; //C[i+1]为0
carry = 0; //进位标志carry为0
}
case 1: { //当c等于1时
C[i + 1] = 1; //C[i+1]为1
carry = 0; //进位标志carry为0
}
case 2: { //当c等于2时
C[i + 1] = 0; //C[i+1]为0
carry = 1; //进位标志carry为1
}
case 3: { //当c等于3时
C[i + 1] = 1; //C[i+1]为1
carry = 1; //进位标志carry为1
}
}
}
C[0] = carry; //C数组最低位等于A[]与B[]最低位之和的进位标志
System.out.println("C数组为:" + Arrays.toString(C));
}
}
}