69,371
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<math.h>
int find(long long x, long long k) {
int t = 0;
while (true) {
long long mid = ((long long)1 << (x - 1)); //注意此处的数据类型
if (k == mid)
return t;
else if (k > mid) { //如果在右侧,折半取反
t = !t;
k = (mid << 1) - k;
}
x--;
}
}
int main() {
int n;
long long max, k;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%lld", &k);
max = ceill(log2l(k + 1)); //最多只需要在第log2(k)个字符中查找字符k(注意向上取整以及数据类型)
printf("case %d:%d\n", i, find(max, k));
}
return 0;
}
[code=c]#include<stdio.h>
#include<math.h>
int find(long long x, long long k) {
int t = 0;
while (true) {
long long mid = ((long long)1 << (x - 1)); //注意此处的数据类型
if (k == mid)
return t;
else if (k > mid) { //如果在右侧,折半取反
t = !t;
k = (mid << 1) - k;
}
x--;
}
}
int main() {
int n;
long long max, k;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%lld", &k);
max = ceill(log2l(k + 1)); //最多只需要在第log2(k)个字符中查找字符k(注意向上取整以及数据类型)
printf("case %d:%d\n", i, find(max, k - 1));
}
return 0;
}
#include<stdio.h>
#include<math.h>
int find(long long x, long long k) {
int t = 0;
while (true) {
int mid = (1 << (x - 1));
if (k == mid)
return t;
else if (k > mid) { //如果在右侧,折半取反
t = !t;
k = (mid << 1) - k;
}
x--;
}
}
int main() {
int n;
long long max, k;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%lld", &k);
max = ceill(log2l(k + 1)); //最多只需要在第log2(k)个字符中查找字符k(注意向上取整以及数据类型)
printf("case %d:%d\n", i, find(max, k));
}
return 0;
}
#include<stdio.h>
#include<math.h>
int find(long long x, long long k) {
int mid = (1 << (x - 1));
if (k == mid) //如果在中间说明为0
return 0;
else if (k < mid) //如果在左边说明跟上一字符串的同一位置相同
return find(x - 1, k);
else
return !find(x - 1, (mid << 1) - k); //右边的话就是上一字符串对称位置的反转
}
int main(){
int n;
long long max, k;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%lld", &k);
max = ceill(log2l(k + 1)); //最多只需要在第log2(k)个字符中查找字符k(注意向上取整以及数据类型)
printf("case %d:%d\n", i, find(max, k));
}
return 0;
}