2020-10-10
문제
두 개의 이진수를 입력받아 이를 더하는 프로그램을 작성하시오.
입력
첫째 줄에 두 개의 이진수가 빈 칸을 사이에 두고 주어진다.
각 이진수는 1 또는 0으로만 이루어져 있으며, 0으로 시작할 수도 있다.
또한 각 이진수의 길이는 80을 넘지 않는다.
출력
첫째 줄에 이진수 덧셈 결과를 출력한다.
결과가 0인 경우를 제외하고는 출력되는 이진수는 항상 1로 시작해야 한다.
Scanner scan = new Scanner(System.in);
String N = scan.next();
String M = scan.next();
int [] sum = new int [80];
int max = N.length() >= M.length() ? N.length() : M.length();
//몇번째 까지 입력되었는지 체크할 변수
int C = 0;
//자리올림 체크 변수
int [] arrN = new int [max];
int [] arrM = new int [max];
int count = 0;
//배열위치 지정함수
for(int i = N.length()- 1; i >= 0 ; i--) {
arrN[count] = N.charAt(i) - '0';
count++;
}
//이진법은 뒤에서 부터 계산하기 때문에 뒤부터 배열에 넣어줌
count = 0;
for(int i = M.length()- 1; i >= 0 ; i--) {
arrM[count] = M.charAt(i) - '0';
count++;
}
for(int i = 0; i < max; i++) {
sum[i] = arrN[i] + arrM[i] + C;
if(sum[i] >= 2) {
sum[i] -=2;
C = 1;
}else {
C = 0;
}
}
if(C == 1) {
//첫쨰 자리에 자리올림이 있었는지
//마지막으로 체크
sum[max] = 1;
for(int i = max; i >=0; i--) {
System.out.print(sum[i]);
}
}else {
for(int i = max-1; i >=0; i--) {
System.out.print(sum[i]);
}
}
출처 링크 : www.acmicpc.net/problem/1252