//使用分治的思想,先将n化为二进制倒序(直接放里面存相当于倒着存)存放入字符数组
//然后利用递归 将每一位是1的下标放入dfs()再进行一次转换
//当循环到位数位二进制倒数第二位且有效时直接输出2
//当循环到位数位二进制倒数第一位且有效时直接输出2(0)
//除了第一位不放+号以外,其他只要不是0的项都放+号
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
void dfs(int n){
int Count=-1;
char ans[20];
while(n){
ans[++Count]=n%2;
n/=2;
}
for(int i=Count;i>=0;i--){
if(ans[i]&&i!=Count)printf("+");//除了第一位不放+号以外,其他只要不是0的项都放+号
if(i>1&&ans[i]){
printf("2(");
dfs(i);//分治进行转换
printf(")");
}
if(i==1&&ans[1])printf("2");
if(i==0&&ans[0])printf("2(0)");
}
}
int main(){
int n;
scanf("%d",&n);
dfs(n);
return 0;
}
洛谷 P1010 幂次方
最新推荐文章于 2024-04-19 14:56:35 发布