18.7.29 luogu P1010 幂次方

题目描述

任何一个正整数都可以用 22 的幂次方表示。例如

137=2^7+2^3+2^0137=27+23+20

同时约定方次用括号来表示,即 a^bab 可表示为 a(b)a(b) 。

由此可知, 137137 可表示为:

2(7)+2(3)+2(0)2(7)+2(3)+2(0)

进一步:

7= 2^2+2+2^07=22+2+20(2^1用2表示),并且

3=2+2^03=2+20

所以最后 137137 可表示为:

2(2(2)+2+2(0))+2(2+2(0))+2(0)2(2(2)+2+2(0))+2(2+2(0))+2(0)

又如:

1315=2^{10} +2^8 +2^5 +2+11315=210+28+25+2+1

所以 13151315 最后可表示为:

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

输入输出格式

输入格式:

 

一个正整数 n(n≤20000)n(n20000) 。

 

输出格式:

 

符合约定的 nn 的 0,20,2 表示(在表示中不能有空格)

 

输入输出样例

输入样例#1: 
1315
输出样例#1: 
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <math.h>
 5 #include <iostream>
 6 
 7 using namespace std;
 8 
 9 void print(int n) {
10     int ini = 14;
11     bool flag = false;
12     while (n) {
13         int tmp = pow(2, ini);
14         if (tmp <= n) {
15             if (flag)printf("+");
16             else flag = true;
17             if (ini == 1)
18                 printf("2");
19             else if (ini == 0)
20                 printf("2(0)");
21             else
22             {
23                 printf("2(");
24                 print(ini);
25                 printf(")");
26             }
27             n -= tmp;
28         }
29         ini--;
30     }
31 }
32 
33 int main()
34 {
35     int n;
36     scanf("%d", &n);
37     print(n);
38     printf("\n");
39     return 0;
40 }
View Code

猜你喜欢

转载自www.cnblogs.com/yalphait/p/9385714.html
今日推荐