The recurses of the algorithm training 2 represents a time limit: 1.0s memory Limit: 512.0MB problem description Any positive integer can be represented by a 2 binary, for example: 137 of the 2 binary is represented as 10001001.
The 2 notation is written in the form of the sum of the power of 2, and the second power is preceded by the following expression: 137=2^7+2^3+2^0
The Covenant power is now represented by parentheses, which means that a^b is represented as a (b)
At this point, 137 can be represented as: 2 (7) +2 (3) +2 (0)
Further: 7=2^2+2+2^0 (2^1 with 2)
3=2+2^0
So the last 137 can be represented as: 2 (2 (2) +2+2 (0)) +2 (+ 0) +2 (0)
Another example: 1315=2^10+2^8+2^5+2+1
So the last 1315 can be expressed as:
2 (2 (+ 0) +2) +2 (2 (+ + (0))) +2 (2 (2) +2 (0)) +2+2 (0) The input format positive integer (1<=n<=20000) output format conforms to the contract N of 0, 2 = (no spaces in the representation) sample input 137 sample Output 2 (2 (2) +2+2 (0)) +2 (0) +2 Example input 1315 sample output 2 (2 (+2 (0)) +2) 2 (0 (+ +2) 2 (2)) +2+2 (0)
Tips
Recursive implementation will be relatively simple, can be output on the side of recursion
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath>using namespace std; void count (int n) {while (n) {int k=n,m,e=0;while (k) {if (k%2==1) {m=e;} k/=2;e++;} N-=pow (2,m); if (m==1) {if (n==0) printf ("2"); else printf ("the");} else if (m==2) {if (n==0) printf ("2 (2)"), Else printf ("2 (2) +");} else if (m==0) {printf ("2 (0)");} else {printf ("2 ("); count (m); if (n==0) printf (")") Else printf (") +");}}} int main () {int n;while (scanf ("%d", &n) ==1) {count (n);p rintf ("\ n");} return 0;}
The recurses representation of algorithm training 2