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의 보수");
}
}
'JAVA > 알고리즘 예제' 카테고리의 다른 글
[JAVA] 7에 가장 가까운 정수 찾기 (0) | 2016.09.14 |
---|---|
[JAVA] 8bit 2진수의 2의 보수 구하기 (0) | 2016.09.14 |
[JAVA] 최대공약수, 최소공배수 계산 문제 (0) | 2016.09.14 |
[JAVA] 약수(Divisor) 관련 문제 (1) | 2016.09.14 |
[JAVA] 소수의 개수 구하기 (2) | 2016.09.07 |