【9406】2的幂次方
次方
2023-09-14 09:03:47 时间
Time Limit: 10 second
Memory Limit: 2 MB
问题描述
任何一个正整数都可以用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)
Input
正整数(n<=20000)
Output
符合约定的n的0,2表示(在表示中不能有空格)
Sample Input
73
Sample Output
2(2(2)+2)+2(2+2(0))+2(0)
【题目链接】:http://noi.qz5z.com/viewtask.asp?id=9406
【题解】
数字最大为2e4;
log2e4大概为15;
就预处理处理出0..15的二进制形式就好(写成字符串);
(直接手算就好);
然后对n进行求二进制的过程;
对最后为1的位加上相应的权2^x即可;
x用预处理出的0..15输出即可;
然后有些地方要注意下
2^3要写成2^(2(2+2^(0));
不能出现3;
再有就是2^1要把1去掉;即只输出2;
【完整代码】
#include <cstdio>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int n;
string a[16];
vector <string> ans;
void get_ans(int x,int num)
{
if (x==0)
return;
get_ans(x>>1,num+1);
if (x&1)
{
if (num==1)
ans.push_back("2");
else
ans.push_back("2(" + a[num] + ")");
}
}
int main()
{
//freopen("F:\\rush.txt","r",stdin);
a[0] = "0";
a[1] = "2(0)";
a[2] = "2";
a[3] = "2+2(0)";
a[4] = "2(2)";
a[5] = "2(2)+2(0)";
a[6] = "2(2)+2";
a[7] = "2(2)+2+2(0)";
a[8] = "2("+a[3]+")";
a[9] = a[8]+"+"+a[1];
a[10] = a[8]+"+"+a[2];
a[11] = a[8]+"+"+a[2]+"+"+a[1];
a[12] = a[8]+"+"+a[4];
a[13] = a[8]+"+"+a[5];
a[14] = a[8]+"+"+a[6];
a[15] = a[8]+"+"+a[7];
cin >> n;
get_ans(n,0);
int len = ans.size();
for (int i = 0;i <= len-1;i++)
{
cout << ans[i];
if (i==len-1)
cout <<'\n';
else
cout <<'+';
}
return 0;
}
相关文章
- 如何快速算出一个数的n次方?
- 剑指 Offer 16. 数值的整数次方
- 求m的n次方(优化时间复杂度)
- 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-927 A的B的C次方次方
- 算法-数值的整数次方详解编程语言
- C语言exp()函数:返回以e的x次幂(次方)
- C语言pow()函数:求x的y次方的值
- C语言ldexp()函数:返回x乘以2的exponent次方(次幂)的值
- 值MySQL中ID最大值:2的31次方1(mysqlid最大)
- Oracle 神器:掌握 N 次方计算的秘诀(oraclen次方)
- 助力企业发展,Oracle 强势再次出击(oracle次方)
- SQL Server技术拓展:更高效率实现次方运算(sqlserver 次方)
- 利用MSSQL打造最优次方解决方案(mssql次方)
- MySQL中pow函数快速计算数值的幂次方(mysql中pow函数)
- 如何判断一个数是否为4的幂次方?若是,并判断出来是多少次方?
- 如何判断一个数是否为2的幂次方?若是,并判断出来是多少次方?