題目: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;
}