题目描述
每个正数都可以用指数形式表示。
例如,137=27+23+20。
让我们用 a(b) 来表示 ab。
那么 137 可以表示为 2(7)+2(3)+2(0)。
因为 7=22+2+20,3=2+20,所以 137 最终可以表示为 2(2(2)+2+2(0))+2(2+2(0))+2(0)。
给定一个正数 n,请你将 n 表示为只包含 0 和 2 的指数形式。
输入格式
输入包含多组数据。
每组数据占一行,一个正数 n。
输出格式
每组数据输出一行,一个指数形式表示。
数据范围
1≤n≤20000,
每个输入最多包含 100 组数据。
样例
输入样例:
1315
输出样例:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
算法1
(暴力枚举)
C++ 代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 100005;
int a[N], n;
string s[30] = {
"2(0)", //1
"2", //2
"2(2)", //4
"2(2+2(0))", //8
"2(2(2))", //16
"2(2(2)+2(0))", //32
"2(2(2)+2)", //64
"2(2(2)+2+2(0))", //128
"2(2(2+2(0)))", //256
"2(2(2+2(0))+2(0))", //512
"2(2(2+2(0))+2)", //1024
"2(2(2+2(0))+2+2(0))", //2048
"2(2(2+2(0))+2(2))", //4096
"2(2(2+2(0))+2(2)+2(0))", //8192
"2(2(2+2(0))+2(2)+2)" //16384
};
void solve() {
a[0] = 1;
for (int i = 1; i <= 16; i++) {
a[i] = a[i - 1] * 2;
}
while (cin >> n) {
for (int i = 16; i >= 0; i--) {
if (n - a[i] >= 0) {
cout << s[i];
n -= a[i];
if (n != 0) cout << "+";
else
break;
}
}
cout << endl;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
solve();
return 0;
}