洛谷 P1010 幂次方

//使用分治的思想,先将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;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值