P1010 幂次方

题目描述任何一个正整数都可以用22的幂次方表示。例如137=27 23 20137=27 23 20同时约定方次用括号来表示,即abab可表示为a(b)a(b)。由此可知,137137可表示为:2(7) 2(3) 2(0)2(7) 2(3) 2(0)进一步:7=2^2 2 2^0$$(2^1用2表示),并且$$3=2 2^0所以最后137137可表示为:2(2(2) 2 2(0)) 2(2 2(0...

P1010 幂次方
题目描述

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

137=27 23 20137=27 23 20

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

由此可知,137137可表示为:

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

进一步:

7= 2^2 2 2^0$$ (2^1用2表示),并且 $$3=2 2^0

所以最后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=210 28 25 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(n≤20000)。

输出格式

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

输入输出样例

#include <bits/stdc  .h>using namespace std;string solve(int a){ string s; if(a==2)return "2"; else if(a==1)return "2(0)"; else if(a==0)return "0"; else while(a>0){  int b=(int)log2(a);  string c;  if(b==1)c="2";  else c="2(" solve(b) ")";  if(s.size()==0) s.append(c);  else s.append(" " c);  a-=pow(2, b); } return s;}int main() { int n; scanf("%d",&n); cout<<solve(n); return 0;}

源文地址:https://www.guoxiongfei.cn/csdn/7546.html
0