ALGO-12_蓝桥杯_算法训练_幂方分解(递归)

时间:2024-06-11 19:36:14
问题描述
  任何一个正整数都可以用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 ;
}