P1010 [NOIP1998 普及组] 幂次方

题目: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;
}
posted @ 2024-05-04 11:53  樱岛麻衣的鹿  阅读(104)  评论(0编辑  收藏  举报