360笔试题:Bittttttts
题目:
分析:
题目起得真随意啊,是在暗示什么吗?然而我并没有用于位运算。
如下图(实际中用的是 deque,因为需要在前面插入)
代码:
#include <iostream>
#include <deque>
using namespace std;
int main() {
int q = 0;
cin >> q;
int k = 0;
long long l = 0, r = 0;
while (q--) {
cin >> k >> l >> r;
// 将 r 转换为 deque
deque<int> deqR;
while (r) {
deqR.push_front(r % k);
r /= k;
}
// 将 l 转换为 deque
deque<int> deqL(deqR.size(), 0);
int idx = deqL.size();
while (l) {
deqL[--idx] = l % k;
l /= k;
}
// 从低到高遍历
long long tmp = 0;
for (int i = deqL.size() - 1; i >= 0; --i) {
tmp = deqL[i];
deqL[i] = k - 1;
if (deqL > deqR) {
deqL[i] = tmp;
break;
}
}
// 将 deqL 转化为十进制数
long long mul = 1, res = 0;
for (int i = deqL.size() - 1; i >= 0; --i) {
res += deqL[i] * mul;
mul *= k;
}
cout << res << endl;
}
}