YTU.3130: 进阶递归之2的幂次方表示

网友投稿 818 2022-10-27

YTU.3130: 进阶递归之2的幂次方表示

YTU.3130: 进阶递归之2的幂次方表示

3130: 进阶递归之2的幂次方表示

Time Limit: 1 Sec   Memory Limit: 64 MB

Submit: 17

Solved: 15

[

​​Submit​​][

​​Status​​][

​​Web Board​​]

Description

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

137=27+23+20

同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:

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

进一步:7=22+2+20(21用2表示)

3=2+20

所以最后137可表示为:

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

又如:

1315=210+28+25+2+1

所以1315最后可表示为:

Input

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

Output

一行,符合约定的n的0,2表示(在表示中不能有空格)。

Sample Input

137

Sample Output

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

HINT

考虑递归出口条件,考虑2的组成部分可以分为哪几种!

AC代码

#includeint num;void fun(int n){ int i = 0; int sum = 1; if(n == 0) return ; if(n == 1) { printf("2(0)"); // 1是2的零次方 return ; } if(n == 2) { printf("2"); // 2的一次方 return ; } while(2*sum <= n) { i ++; sum = 2*sum; } printf("2"); if(i != 1) { printf("("); fun(i); printf(")"); } if(n - sum != 0) printf("+"); fun(n - sum);}int main(){ int n; num = 0; scanf("%d",&n); if(n == 0) { printf("%d",n); return 0; } fun(n); return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:microSocket 十分适合学习的go语言socket框架
下一篇:习题8.1 银行排队问题之单队列多窗口服务
相关文章

 发表评论

暂时没有评论,来抢沙发吧~