Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C 언어에서 연산자 없이 두 숫자의 합 구하기 – printf() 반환값 활용 트릭

이번 글에서는 프로그램 내에서 어떠한 종류의 연산자도 사용하지 않고 두 숫자의 합을 출력하는 방법을 알아보겠습니다.

이 문제는 다소 까다로운 편입니다. 이를 해결하기 위해 우리는 printf() 함수의 최소 폭 지정(minimum width field) 기능을 활용할 것입니다. 예를 들어, printf()를 사용해 "Hello"라는 문자열 앞에 x개의 공백을 삽입하고 싶다면 아래와 같이 작성할 수 있습니다. printf()는 폭(width) 값과 출력할 문자를 차례로 인자로 받으며, 여기서는 공백 문자를 출력하게 됩니다.

예제 코드

#include<stdio.h>
main() {
    int x = 10;
    printf("%*cHello", x, ' ');
}

실행 결과

Hello

그렇다면 이 기능이 두 수의 합을 구하는 데 어떻게 활용될 수 있을까요? x와 y를 입력받아 x + y의 결과를 얻는 상황을 가정해 봅시다. 위에서 설명한 방식을 응용하면, 먼저 x개의 공백을 출력한 뒤 이어서 y개의 공백을 추가로 출력할 수 있습니다. 그리고 printf() 함수의 반환값을 곧바로 결과로 사용하는 것입니다. C 언어에서 printf()는 성공적으로 출력된 문자열의 전체 길이를 반환하기 때문에, 공백 x개와 공백 y개가 합쳐진 문자열의 길이는 자연스럽게 x + y가 됩니다.

동작 원리 정리

  • %*c 형식 지정자는 폭 값을 동적으로 전달받아 해당 폭만큼 문자를 출력합니다.
  • x개의 공백과 y개의 공백을 연속으로 출력하면 총 (x + y)개의 문자가 화면에 출력됩니다.
  • printf()의 반환값인 출력된 문자 수가 바로 두 수의 합이 됩니다.

예제 코드

#include<stdio.h>
int add(int x, int y) {
    int len;
    len = printf("%*c%*c", x, ' ', y, ' ');
    return len;
}
main() {
    int x = 10, y = 20;
    int res = add(x, y);
    printf("\nThe result is: %d", res);
}

실행 결과

The result is: 30

위 코드에서 add() 함수는 +, += 등의 산술 연산자를 전혀 사용하지 않고도 두 수의 합을 계산하여 반환합니다. 이처럼 표준 라이브러리 함수의 특성을 창의적으로 활용하면, 겉보기에 불가능해 보이는 문제도 해결할 수 있습니다. 다만 실무 코드에서는 가독성과 유지보수성을 위해 일반적인 산술 연산자를 사용하는 것이 권장되며, 본 예제는 C 언어의 동작 원리를 깊이 이해하기 위한 학습용 트릭으로 활용하시기 바랍니다.