2481: 【作】【普及-】【P1010】幂次方
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:11
解决:4
题目描述
任何一个正整数都可以用 的幂次方表示。例如 。
同时约定方次用括号来表示,即 可表示为 。
由此可知, 可表示为
进一步:
( 用 表示),并且 。
所以最后 可表示为 。
又如
所以 最后可表示为 。
输入
一行一个正整数 。
输出
符合约定的 的 表示(在表示中不能有空格)。
样例输入 复制
1315
样例输出 复制
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
提示
对于 的数据,。
#include<bits/stdc++.h>
using namespace std;
string expand(int x) {
if (x==1) return "2(0)";
else if (x==2) return "2";
else if (x==3) return expand(2) +"+"+expand(1);
int b=(int)log2(x);
if (log2(x)==b)
return "2("+expand(b) +")";
else
return "2("+expand(b)+")+"+expand(x-(int)pow(2,b));
}
int main(){
int n;
cin>>n;
cout<<expand(n)<<endl;
return 0;
}