1111... | = | 2^n-1 |
---|---|---|
长度为n的都是1的二进制数 | = | 2的n次方-1 |
思路:对于每个数只有选或不选(1或0)的二进制,剩余见代码
点击查看代码
#include<bits/stdc++.h>
using namespace std;
long long f[20];
int main(){
freopen("202409C.in","r",stdin);
freopen("202409C.out","w",stdout);
long long n,m;
cin>>n>>m;
f[0]=1;
for(long long i=1;i<n;i++){
f[i]=f[i-1]*7;//预处理
}
long long cnt=pow(2,n)-m;//一个观点:pow(2,n)-m表示一个长度为n的二进制数的第m大
long long ans=0;
for(int i=0;i<n;i++){
ans+=((cnt>>i)&1)*f[i];//将二进制中为1的对应数相加
}
cout<<ans;
return 0;
}