P1010 [NOIP1998 普及組] 冪次方

樱岛麻衣的鹿發表於2024-05-04

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

相關文章