2的N次幂表示
2015-06-03 18:47
369 查看
问题描述
任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。
将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0
现在约定幂次用括号来表示,即a^b表示为a(b)
此时,137可表示为:2(7)+2(3)+2(0)
进一步:7=2^2+2+2^0(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)
输入格式
正整数(1<=n<=20000)
输出格式
符合约定的n的0,2表示(在表示中不能有空格)
样例输入
137
样例输出
2(2(2)+2+2(0))+2(2+2(0))+2(0)
样例输入
1315
样例输出
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
提示
用递归实现会比较简单,可以一边递归一边输出
参考代码:
测试结果:
任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。
将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0
现在约定幂次用括号来表示,即a^b表示为a(b)
此时,137可表示为:2(7)+2(3)+2(0)
进一步:7=2^2+2+2^0(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)
输入格式
正整数(1<=n<=20000)
输出格式
符合约定的n的0,2表示(在表示中不能有空格)
样例输入
137
样例输出
2(2(2)+2+2(0))+2(2+2(0))+2(0)
样例输入
1315
样例输出
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
提示
用递归实现会比较简单,可以一边递归一边输出
参考代码:
#include<stdio.h> #include<math.h> void power(int n){ int i; if(n>=4){ printf("2("); for(i=0;i<n;i++){ if(pow(2,i)<=n&&pow(2,i+1)>n) break; } power(i); n-=pow(2,i); putchar(')'); if(n>0){ printf("+"); power(n); } }else{ if(n==3){ printf("2+2(0)"); } if(n==2) putchar('2'); else{ if(n==1){ printf("2("); putchar('0'); putchar(')'); } } } } int main(){ int n; scanf("%d",&n); power(n); return 0; }
测试结果:
相关文章推荐
- 账户推广流程
- 网页加速的14条法则
- 数理统计中的点估计
- Mac上mariadb的启动与关闭
- oracle vm virtualbox 如何让虚拟机可以上网
- 软件工具之实用软件推荐
- Eclipse快捷键
- iOS模型以及使用
- Extjs中引入JSP页面
- Xcode6 中iphone5s(7.1)模拟器无法全屏
- quartz集群分布式(并发)部署解决方案-Spring
- c++智能指针:auto_ptr shared_ptr
- Mysql 数据库文件存储在哪个目录
- 二层冗余与环路避免基础
- HihoCoder第十四周:无间道之并查集
- Struts2实现用户自行选择语言
- Android更换皮肤解决方案
- "Cannot convert value '0000-00-00' from column 2 to TIMESTAMP"mysql时间转换bug
- HihoCoder第十四周:无间道之并查集
- 感觉到了最关键的时候了