把两个n位二进制整数加起来的问题

This is so split. 2017-08-16 09:14:01
题目是:考虑把两个n位二进制整数加起来的问题,这两个整数分别存在两个n元数组A和B中。这两个数的和应按二进制形式存储在一个(n+1)元数组C中。
我的想法是:因为AB数组里都是装二进制数,所以元素只有0和1。将AB数组中每相同位置的两个数和定义的进位标志相加,结果有四种情况:0,1,2,3,结果为0时,C数组当前位置存入0,进位标志变为0;结果为1时,C数组当前位置存入1,进位标志变为0;结果为2时,C数组当前位置存入0,进位标志变为1;结果为3时,C数组当前位置存入1,进位标志变为1。
但是实际写代码的时候,有两个问题我不知道怎么解决:第一个问题是,主程序里的输入不能结束,当然这个不影响程序的运行,但是我总感觉这是不对的,不知道怎么改;第二个问题是在方法里面,不管输入的AB数组是什么,输出的C数组里的元素全是1。
求大神帮我看一下哪里有问题,要怎么改,谢谢!
代码:
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));
}
}
}


错误结果:
...全文
237 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧