蓝桥杯算法训练_2的次幂
来源:互联网 发布:卡在client mac addr 编辑:程序博客网 时间:2024/05/26 15:55
问题描述
任何一个正整数都可以用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)
将这种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)
这个比较显然的做法是递归,不过由于数据较小(20000),其实可以打2的没几次的字符串表。
递归代码:
#include <iostream>#include<stdio.h>using namespace std;int n;void dfs(int a){ int bin[20]={0}; int p=0; while(a>=1) { bin[p]=a%2; a=a/2; p++; } int flag=0; for(int i=19;i>=0;i--) { if(bin[i]==1) { if(flag==1) { printf("+"); } if(i==1) { printf("2"); }else if(i==0) { printf("2(0)"); }else { printf("2("); dfs(i); printf(")"); } flag=1; } }}int main(){ scanf("%d",&n); dfs(n); //cout << "Hello world!" << endl; return 0;}
0 0
- 蓝桥杯算法训练_2的次幂
- 蓝桥杯_算法训练_2的次幂表示(递归)
- 蓝桥杯_算法训练_2的次幂表示(递归)
- 蓝桥杯算法训练_2的次幂表示+前缀表达式+Anagrams问题+出现次数最多的整数
- 1501102328-蓝桥杯-算法训练 2的次幂表示
- 蓝桥杯 算法训练 2的次幂表示
- 蓝桥杯 算法训练 2的次幂表示
- 蓝桥杯 算法训练 2的次幂表示
- 蓝桥杯 算法训练 2的次幂表示
- 蓝桥杯--算法训练 2的次幂表示
- 蓝桥杯-算法训练 2的次幂表示
- 蓝桥杯算法训练——2的次幂表示
- 蓝桥杯:算法训练 2的次幂表示
- 蓝桥杯 算法训练 2的次幂表示
- 蓝桥杯 算法训练 2的次幂表示
- 蓝桥杯 算法训练 2的次幂表示
- 蓝桥杯 算法训练 2的次幂表示
- 蓝桥杯 算法训练 2的次幂表示(构造)
- GDB调试精粹及使用实例
- Linux信号实践(1) --Linux信号编程概述
- UVA 10706 Number Sequence
- 数据结构复习_队列、循环对列
- UVA 10700 Camel trading
- 蓝桥杯算法训练_2的次幂
- Matlab画柱状图 stacked
- Android进程间通信(IPC)的AIDL机制:Hello World示例
- spring 源码编译
- hdu 2510 符号三角形 (状压dp打表存入文件,O(1))
- UVA 10020 Minimal coverage
- 测试环境搭建心得
- mkdir命令
- 试水微信公众平台开发