洛谷 P1010 幂次方
Posted 一蓑烟雨任生平
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P1010 幂次方相关的知识,希望对你有一定的参考价值。
题目描述
任何一个正整数都可以用2的幂次方表示。例如
137=2^7+2^3+2^0
同时约定方次用括号来表示,即a^b 可表示为a(b)。
由此可知,137可表示为:
2(7)+2(3)+2(0)
进一步:7= 2^2+2+2^0 (2^1用2表示)
3=2+2^0
所以最后137可表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:
1315=2^10 +2^8 +2^5 +2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
输入输出格式
输入格式:
一个正整数n(n≤20000)。
输出格式:
符合约定的n的0,2表示(在表示中不能有空格)
输入输出样例
输入样例#1: 复制
1315
输出样例#1: 复制
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
思路:搜索。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,tot; int num[100]; void dfs(int x){ int sum=0,tmp[1000]={0}; while(x){ tmp[sum++]=x%2;x/=2; } for(int i=sum-1;i>=0;i--) if(tmp[i]){ if(i==0) cout<<"2(0)"; else if(i==1) cout<<"2"; else{ cout<<"2(";dfs(i);cout<<")"; } tmp[i]=0; break; } for(int i=tot-1;i>=0;i--) if(tmp[i]){ if(i==0) cout<<"+2(0)"; else if(i==1) cout<<"+2"; else{ cout<<"+2(";dfs(i);cout<<")"; } } } int main(){ scanf("%d",&n); while(n){ num[tot++]=n%2;n/=2; } for(int i=tot-1;i>=0;i--) if(num[i]){ if(i==0) cout<<"2(0)"; else if(i==1) cout<<"2"; else{ cout<<"2(";dfs(i);cout<<")"; } num[i]=0; break; } for(int i=tot-1;i>=0;i--) if(num[i]){ if(i==0) cout<<"+2(0)"; else if(i==1) cout<<"+2"; else{ cout<<"+2(";dfs(i);cout<<")"; } } }
以上是关于洛谷 P1010 幂次方的主要内容,如果未能解决你的问题,请参考以下文章