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;
}
%%%