본문 바로가기

JAVA/알고리즘 예제

[JAVA] 5자리 2진수의 보수 구하기

0또는 1로 입력되는 다섯 개의 숫자를 배열에 입력받아 1의 보수와 2의 보수를 구하는 문제.


실행 결과



package jungbo;


import java.util.InputMismatchException;

import java.util.Scanner;


public class P90Complement {

public static void main(String[] args) {

int bin[] = new int[5];//처음 입력받은 이진수를 저장할 배열

int bo1[] = new int[5];//1의 보수를 저장할 배열

int bo2[] = new int[5];//2의 보수를 저장할 배열

int i; //배열의 자리수

int C=1; //자리올림수(carry)

//2의 보수를 구할때 첫 자리올림수는 1이어야한다.

//1의보수에 1을 더한 것이 2의 보수이기 때문.

for(i=0;i<5;i++){

System.out.print(i+1+"번째 자리에 들어갈 수 입력 : ");

try{

while(true){

Scanner scan = new Scanner(System.in);

bin[i] = scan.nextInt();

if(bin[i]==0 || bin[i]==1){

break;

}else{

System.out.println("0또는 1만 입력 가능합니다.");

}

}

}catch(InputMismatchException e){

System.out.println("숫자 0또는 1만 입력하세요.");

}

bo1[i] = 1-bin[i];

}

i--; // 배열방은 0~4이므로 i를 4로 만들어주기 

while(i>=0){

bo2[i] = bo1[i] + C;

bo2[i] = bo2[i]%2; //1+1이 되어 2로 올라갈 경우 다시 0으로 내려준다.

C = bo1[i]*1; //1+C일 경우 자리올림 발생, 0+C일 경우 자리올림 발생x

i--;

}

//출력

for(i=0;i<5;i++){

System.out.print(bin[i]);

}

System.out.println(" 입력 받은 수");

for(i=0;i<5;i++){

System.out.print(bo1[i]);

}

System.out.println(" 1의 보수");

for(i=0;i<5;i++){

System.out.print(bo2[i]);

}

System.out.println(" 2의 보수");

}

}