文章
10
粉丝
399
获赞
14
访问
100.8k
#include<iostream>
#include<cmath>
using std::cout;
using std::cin;
int GetBit(int n,int i)
{
return(n>>i)&1;
}//即判断对应的最高二进制位
void Print(int n)
{
bool first=true;
for(int i=15;i>=0;i--)
{
if(GetBit(n,i))
{
if(!first)cout<<"+";//这里有递归的思想,这里的加号不好处理
else first=false;
if(!i)cout<<"2(0)";//这里在二进制的第一位和第二位可以看作是特殊处理
else if(i==1)cout<<"2";
else {
cout<<"2(";
Print(i);//这里的递归就比较容易理解了,如果仅有15位可以做一个常量数组,更加快捷
cout<<")";
}
}
}
}
int main()
{
int a;
cin>>a;
Print(a);
return 0;
}
这里也是参考了网上的一些解法,我自己写的比较繁琐。
这个题的话比较考验基本功,题意很明确,就是二进制转换,二进制转换的核心代码,这个网站的公开课上也有提到,很详细,主要是输出问题。一个是GetBit这里用for循环也可以,左移更巧妙。这里按位与是判断是否为0。另一个点是这里的flag变量的设置。这个在循环中比较常见,就是为了应对在循环中的不同条件下的分支判断,当然不用也可以,不过这样的话判断语句就必须重新写,很复杂,远不如设置一个bool变量方便。总之,这样做很常见。
...
登录后发布评论