*由于不熟悉 ull
类型的格式字符(百度告诉我用 %ld
或 %u
等各种不一的答案,但看起来并没有什么效果),故使用 cin
和 cout
。
思路:依次输出各位,当 k≤2n 时,输出 0,否则输出 1。若已输出的 1 的位数为奇数,则相反输出 0 和 1。
这个代码不会出现 pow(2,64)
的情况。但最后一个点不过。
#include<iostream>
#include<cmath>
using namespace std;
unsigned long long n,k;
int main()
{
cin>>n>>k;
k++;
bool judge=0;
for(int a=n; a>=1; a--)
{
unsigned long long temp=pow(2,a-1);
if(!judge)
{
if(k<=temp) cout<<"0";
else cout<<"1",judge=1-judge,k-=temp;
}
else
{
if(k<=temp) cout<<"1",judge=1-judge;
else cout<<"0",k-=temp;
}
}
return 0;
}