洛谷 P1010 幂次方
2016-06-08 15:02
447 查看
P1010 幂次方
题目提供者洛谷OnlineJudge
标签 数论(数学相关) 递归/分治 1998 NOIp提高组 NOIp普及组
难度 普及-
通过/提交 846/1337
提交该题 讨论 题解 记录
题目描述
任何一个正整数都可以用2的幂次方表示。例如
同时约定方次用括号来表示,即a^b 可表示为a(b)。
由此可知,137可表示为:
进一步:7= 2^2+2+2^0 (2^1用2表示)
所以最后137可表示为:
又如:
所以1315最后可表示为:
思路不多说 自己看代码吧
题目提供者洛谷OnlineJudge
标签 数论(数学相关) 递归/分治 1998 NOIp提高组 NOIp普及组
难度 普及-
通过/提交 846/1337
提交该题 讨论 题解 记录
题目描述
任何一个正整数都可以用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)
思路不多说 自己看代码吧
#include<iostream> using namespace std; int n; void solve(int a){//假设它可以按要求输出a if (a==0) cout<<0;//补丁,写到后来加上的,你暂且往下读就明白作用了 else if(a==1) cout<<"2(0)"; else if(a==2) cout<<"2";//显然的边界 else{ int t=a,i=0; while(t) t>>=1,i++;//找出数a在二进制下的位数 bool f=1;//是不是第一个输出的数字,用来指示加号的输出 for(i=i-1;i>=0;i--)//i=i-1得到最高位标号,i指示位数,从高到低依次遍历所有位,功能是把数a分解成2的幂的和 if((a>>i)&1) {//当前位是否为1 if(f) f=0; else cout<<"+";//控制加号输出 if(i==1) cout<<2;//第二个补丁……不加这句会出现2(2(0)),它等于2 else cout<<"2(",solve(i),cout<<")";//当前位可以分解成2^i,用solve(i)表示出指数 } } } int main(){ cin>>n; solve(n); }
相关文章推荐
- I'm going to bloging!!
- HDU 4772 Zhuge Liang's Password(暴力)
- Android事件传递
- 查看
- Plupload 上传插件 使用指南 (二)jquery
- 0-2岁儿童早期教育计划
- Eclipse自动补全编辑时出现闪退
- View 的绘制流程
- web编程细节
- SAS ods output
- Android studio 使用总结(不断更新)
- Lua和C++交互详细总结_3_C++调用Lua
- 快捷方式
- JavaScript给控件添加事件的方法
- centos下安装ZooKeeper
- 深度学习FPGA实现基础知识13(向专家致敬--深度学习-LeCun、Bengio和Hinton的联合综述)
- Spring Annotation Processing: How It Works--转
- Plupload 上传插件 使用指南 jquery
- 异步套接字基础:select函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
- hdu 1598 find the most comfortable road 枚举+最小成生树 kruskal 解题报告