본문 바로가기

Solutions/Mr.K's Solution

PKU 2845. 01000001. [판정:AC]


쩝;

정답률은 약 30%로 비교적 낮은 편에 속하는 것 같지만, 풀어보니 그런대로 쉽군요

이 문제를 야심차게 준비한 스파킹한테는 심심한 사과를.. ㅋㅋ



풀이는 간단합니다

1과 0으로 이루어진 2진수를 표현하기 위한 구조체를 하나 만듭니다

처음에는 2진수의 크기에 따라 구조체 내부 digit의 길이가 동적으로 변화하도록 설계했지만,
잘 보니 메모리 한계가 넉넉하더군요

그래서 부담없이 81byte짜리 구조체를 만들었습니다
(실제 메모리에서는 구조체를 하나 선언할때마다 84byte의 메모리를 잡을지도 모르지만, 뭐 이건 여기서 중요하지 않습니다)


clear함수는 구조체를 초기화하는 함수입니다

assign함수는 scanf를 통해 입력받은 2진수를 구조체에 대입하는 함수입니다

summation함수는 두 구조체가 가진 값을 더해서 반환하는 함수입니다

printb함수는 구조체가 가진 값을 출력하는 함수입니다


clear함수는 body부분을 읽어보시면 될 듯 하니 설명은 패스하겠습니다

assign함수는
함수 내부에서 81byte짜리 char형 배열을 선언해서 그 배열에 먼저 입력을 받고,
실제 입력을 해야하는 구조체에는 먼저 입력받은 배열의 것을 그대로 복사하되,
일의자리가 digit의 맨 끝에 위치하도록 만들어줍니다
(예 : input이 1101101이라면 실제 구조체에는 00…001101101로 저장됩니다)

summation함수도 body부분을 읽어보시면 될 듯 하니 설명은 패스하겠습니다
두 수의 덧셈을 할 때, 뒤(일의자리)에서부터 계산하는 방식을 그대로 적용했습니다

printb함수는
첫번째 for문에서 앞에 있는 0을 skip하는 작업을 하고,
두번째 for문에서 나머지 2진수를 출력합니다