2014년 7월 22일 화요일

1252 이진수 덧셈

두 이진수를 덧셈하는 문제다.
파이썬같은 언어로는 바로 덧샘해주면 그만이지만, C에서는 생각보다 쉽지 않다.

우선 길이가 80이기때문에 문자열로 받아주어야 한다.
그리고 두 이진수를 첫자리부터 계산해주기 위해 reverse를 한다.
첫자리부터 계산을 하는데, 범위는 가장 큰 문자열로 한다.
각 자리의 숫자는 '1'과 '0'의 문자로 되어있기 때문에, 그 자리의 문자가 '1'이면 1, 아니면 0으로 바꾸어주고, 덧셈을 한다.
덧셈을 할때 해당자리는 2로 나눈 나머지 값을 놓으면되고, 만약 각 자리가 1,1이라 자리올림이 생기면 처리해주는 변수를 따로 둔다.
이때 바로 출력하지말고 출력할 버퍼에 하나씩 쌓는다.
반복이 끝나면 맨마지막 자리에 올림이 발생했는가를 판단해서 추가해주고,
출력버퍼를 reverse 해준다.
그 후 시작부터 끝까지 보면서 0으로 시작하는 경우엔 잘라내준다.

첨엔 간단해 보였으나 생각보다 어려운 문제였다.

소스

댓글 2개:

  1. 코드에 헤더파일이나 함수의 리턴타입이 빠져있던데 c언어가 안니 다른 언어인가요?ㅠㅠ 궁금하네요

    답글삭제
  2. 아.. 죄송합니다.
    과거 C언어로 대충 코딩한것의 잔재네요. 지금보면 소름돋는 코드..
    C언어로 코딩되어있는거고 아마 파일 확장자를 .cpp이 아닌 .c로 하면 컴파일이 되긴 할겁니다. 리턴타입이 빠져있으면 int인거라고 보시면 됩니다.

    답글삭제