问题描述
任何一个正整数都可以用2的幂次方表示。例如:
=++
同时约定方次用括号来表示,即ab 可表示为a(b)。
由此可知,137可表示为:
()+()+()
进一步:= ++ (21用2表示)
=+
所以最后137可表示为:
(()++())+(+())+()
又如:
= + + ++
所以1315最后可表示为:
((+())+)+((+()))+(()+())++()
输入格式
输入包含一个正整数N(N<=),为要求分解的整数。
输出格式
程序输出包含一行字符串,为符合约定的n的0,2表示(在表示中不能有空格)
AC代码:
#include <stdio.h>
#include <math.h>
#define M 2 void dfs(int x)
{
int i;
while (x != && x != )
{
printf("%d",M);
for (i = ; pow(M,i+) <= x ; i ++);
if (i != )
{
printf("(");
dfs(i);
printf(")");
}
x -= pow(M,i);
if (x == )
{
return ;
}
printf("+");
}
printf("%d",x);
return ;
} int main(void)
{
int n;
scanf("%d",&n);
dfs(n);
return ;
}