[PS] [SC]두 숫자 더하기
main(n) { gets(&n); putchar(n % 85 + 5); }
위는 일의자리 두 숫자를 더하는 소스이다.
원리는 아래와 같다.
만일 0 0을 입력하면 0이 나오고
4 4를 입력하면 8이 나오는 소스이다.
이해하는데 좀 힘들었는데, 간략하게 한번 설명해보도록 하겠다.
0 0을 입력했을때를 예시로 들어보자
일단 int는 생략이 된것이고,
gets와 putchar같은 함수들은 built-in 함수라 include가 없어도 컴파일러에서 추가해준다.
0 0을 입력하면 int 의 4바이트에
[0][' '][0][\0] 이 입력된다.
즉 10진수로 한바이트씩 보자면
48 32 48 00 이 들어가 있다.
이는 결국 10진수로 변환하면 컴퓨터는 리틀앤디언방식을 사용하므로
481 +
32256 +
4865536 +
016777216 이다. (2^24)
종이에 그려보면 이해가 갈것이다.
마지막 널문자는 제외하고,
즉 우리는 저기서 원하는 숫자만을 추출하려면 256과 65536을 1로만들어야한다.
간단하게 5로 나눈 나머지를 가져오면된다. 하지만
ASCII의 '9' 인 57보다 커야, 결과값에 영향을 미치지 않는다.
즉 57보다 크고 65535 보다 작은데, 저 두수를 나눴을떄 1이 나오는 수중 가장작은 수를 찾으면 85가 나오게된다.
즉(48+32+48)%85는 43이 나오게된다.
만일 0 + 1이였다면
44가 나오게 되겠지
즉 우리는 최종 결과값에서 43을 빼면된다.
main(n){gets(&n);printf("%d",n%85-43);}
을 했을경우는 2자리 까지 출력된다. 만일 한자리의 결과만을 원한다면
ASCII값이 되야하므로 5를 더햐 '0'을만들어 putchar로 출력한다.
Author And Source
이 문제에 관하여([PS] [SC]두 숫자 더하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@springkim/PS-SC두-숫자-더하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)