洛谷p1010幂次方(分治加递归)题目链接
方法一:分治加递归
代码如下
#include<cstdio>
#include<iostream>
const int maxx=50;
using namespace std;
int number[maxx];
//number代表存着2的倍数值的数组
int dfs(int n)
{
int j=0;
if(n!=0)
{
while(n>=number[j])
{
j++;
}
n-=number[j--] ;//因为要用num减掉已经计算过的
printf("2");
if(j!=1) printf("(");
if(j==0||j==2) printf("%d)",j);//注意还有一个)
if(j>=3) {
dfs(j);
printf(")");
}
if(n!=0)
{
printf("+");
dfs(n);
}
}
}
int main()
{
int num;//这里num不能用全局变量
scanf("%d",&num);
number[0]=1;
for(int i=1;i<=50;i++)
{
number[i]=number[i-1]*2;
}
dfs(num);
return 0;
}
方法二:皮一下,打个表哈哈哈哈哈哈
<