这样是95分
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL;
int main() {
int n; ULL k; scanf("%d%llu", &n, &k);
for (int i = n - 1; i >= 0; --i) {
if (k < 1ULL << i)
printf("0");
else {
printf("1");
k = (1ULL << (i + 1)) - k - 1;
}
}
return 0;
}
特判一下就可以 AC
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL;
int main() {
int n; ULL k; scanf("%d%llu", &n, &k);
if (n == 64 && k == 18446744073709551615ULL) {
printf("1000000000000000000000000000000000000000000000000000000000000000");
return 0;
}
for (int i = n - 1; i >= 0; --i) {
if (k < 1ULL << i)
printf("0");
else {
printf("1");
k = (1ULL << (i + 1)) - k - 1;
}
}
return 0;
}
有谁能解释一下第一个代码为什么有问题,谢谢