E30571: 十进制整数的反码
bit manipulation, http://cs101.openjudge.cn/practice/E30571/
cpp
#include <array>
#include <iostream>
auto main() -> int {
int n;
std::array<int, 31> T = {0, 1, 1};
std::cin >> n;
if (n >= 1 && n <= 2) {
std::cout << T[n] << "\n";
return 0;
}
for (int i = 3; i <= n; i++) {
T[i] = T[i - 1] + T[i - 2] + T[i - 3];
}
std::cout << T[n] << "\n";
return 0;
}共用时10min
简单的位运算
cpp
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
int get(int n) {
if (n == 0) return 1;
int ans = 0;
while (n) {
n >>= 1;
ans++;
}
return (1 << ans) - 1;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
cout << get(n) - n << endl;
return 0;
}