多项式二的六次方加二的三次方加二的零次方的二进制数怎么表示?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多项式二的六次方加二的三次方加二的零次方的二进制数怎么表示?相关的知识,希望对你有一定的参考价值。
参考技术A 二进制数表示为1001001题解二的幂次方
题目描述
任何一个正整数都可以用2的幂次方表示。例如:137=27+23+2027+23+20,同时约定次方用括号来表示,即abab可表示为a(b)。
由此可知,137可表示为:2(7)+2(3)+2(0),进一步:7=22+2+2022+2+20(2121用2表示),3=2+202+20, 所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)。
又如:1315=210+28+25+2+1210+28+25+2+1,所以1315最后可表示为:2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)。
输入输出格式
输入格式:
一行,一个正整数n。(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)
首先,如何把一个数转成二的幂次方表示形式呢?
先把这个数转成二进制,例如3可以转为11,按权值展开可得2+2(0),然后再用递归再把次方数转二进制,以此类推
具体程序如下:
#include<iostream>
#include<cstdio>
using namespace std;
void f(int num)
{
int b[100000]={},c=0;
bool check=false;
if(num==0) {cout<<0; return;}
if(num==1) {cout<<"2(0)"; return;}
if(num==2) {cout<<"2"; return;}
while(num!=0)
{
b[c]=num%2;
num/=2;
c++;
}
for(register int i=c-1;i>=0;--i)
{
if(b[i]==1)
{
if(!check)
{
if(i==1)
{
cout<<"2";
check=true;
continue;
}
cout<<"2(";
f(i);
cout<<")";
check=true;
}
else
{
if(i==1)
{
cout<<"+2";
continue;
}
cout<<"+2(";
f(i);
cout<<")";
}
}
}
}
int main()
{
int x=0;
cin>>x;
f(x);
}
以上是关于多项式二的六次方加二的三次方加二的零次方的二进制数怎么表示?的主要内容,如果未能解决你的问题,请参考以下文章