알고리즘 훈련 멱 분해

문제 설명 은 모든 정수 가 2 의 멱 차방 으로 표시 할 수 있다.예 를 들 어 137 = 27 + 23 + 20 은 동시에 각 차 를 괄호 로 표시 한다. 즉, ab 는 a (b) 로 표시 할 수 있다.이 를 통 해 알 수 있 듯 이 137 은 2 (7) + 2 (3) + 2 (0) 진일보: 7 = 22 + 2 + 20 (21 은 2 로 표시) 3 = 20 이 므 로 마지막 137 은 2 (2 (2) + 2 (0) + 2 (0) + 2 (0) 와 같은 1315 = 210 + 28 + 25 + 2 + 1 이 므 로 1315 는 마지막 으로 2 (2 (2 + 2 (0) 로 표시 할 수 있다.+ 2) + 2 (2 (2 + 2 (0)) + 2 (2 (2) + 2 (0) + 2 (0) 입력 형식 입력 은 정수 N (N < = 20000) 을 포함 하여 분 해 를 요구 하 는 정수 입 니 다.출력 형식 프로그램 출력 은 한 줄 의 문자열 을 포함 합 니 다. 약속 한 n 의 0, 2 표시 (표시 에 빈 칸 이 있 으 면 안 됩 니 다)
#include <stdio.h>

void powerResolve(int num)
{
    if(num == 3){
        printf("2+");
        printf("2(0)");
        return;
    }
    if(num == 2){
        printf("2");
        return;
    }
    if(num == 1){
        printf("2(0)");
        return;
    }
    if(num == 0){
        printf("0");
        return;
    }

    int tempNum, count;

    tempNum = 1;
    count = 0;

    while(tempNum < num){
        tempNum <<= 1;
        count ++;
    }
    if(tempNum != num){
        tempNum >>= 1;
        count --;
    }


    printf("2("),powerResolve(count),printf(")");
    if(tempNum != num){
        printf("+");
        powerResolve(num - tempNum);
    }

}


int main()
{
    int N;

    scanf("%d", &N);

    powerResolve(N);

    return 0;
}

좋은 웹페이지 즐겨찾기