洛谷1010 幂次方

@Llf0703  November 27, 2018

NOIp才考了(好吧是我把它做成了)分治,再加上我分治也不太熟悉,就先做下分治。

虽然是一道普及-,但细节还是廷考验人的,再加上很久没打题了所以搞了很久。

思路就是找到原数所能分出的最大的2的整数幂次方,然后将幂次数和剩下的分治处理即可。细节就是2(2(0))应该直接写成2

int n;

void work(int x)
{
    if (x==0)
    {
        printf("0");
        return;
    }
    int mx=1,cnt=0;
    while (mx*2<=x) mx*=2,cnt++;
    x-=mx;
    if (cnt!=1)
    {
        printf("2(");
        work(cnt);
        printf(")");
    }
    else printf("2");
    if (!x) return;
    printf("+");
    work(x);
    return;
}

int main()
{
    n=read();
    work(n);
    return 0;
}

添加新评论

  1. %%%

    Reply