题目:P1010 [NOIP1998 普及组] 幂次方
[NOIP1998 普及组] 幂次方
题目描述
任何一个正整数都可以用 2 的幂次方表示。例如 137=27+23+2^0。
同时约定次方用括号来表示,即 a^b 可表示为 a(b)。
由此可知,137 可表示为 2(7)+2(3)+2(0)
进一步:
$7= 22+2+20 ( 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 的0, 2表示(在表示中不能有空格)。
样例 #1
样例输入 #1
1315
样例输出 #1
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
思路:
本题数据不大,所以可以直接暴力分解就可以解答。
方法一:
点击查看代码
#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define pii pair<int,int>
#define inf 0x3f3f3f3f
#define ll long long
#define el '\n'
using namespace std;
int n;
void f(int x)
{
for (int i = 14; i >= 0; i--) {
if ((1 << i) <= x) {
if (i == 0) cout << "2(0)";
else if (i == 1) cout << "2";//2个特判
else {
cout << "2(";
f(i);
cout << ")";
}
x -= (1 << i);
if (x) cout << "+";//x!=0,代表没用分解完,需要加个“+”
}
}
}
void solve()
{
cin >> n;
f(n);
}
int main()
{
ios;
solve();
return 0;
}