题解 | #找零# 位运算
基础版
int main()
{
wint_t N;
cin >> N;
// 64元硬币
wint_t cost = 1024 - N, coin = cost / 64;
cost %= 64;
// 16元硬币
coin += cost / 16;
cost %= 16;
// 4元硬币
coin += cost / 4;
cost %= 4;
// 1元硬币
coin += cost;
cout << coin;
}
位运算
int main()
{
wint_t N;
cin >> N;
// 64元硬币
wint_t cost = 1024 - N, coin = cost >> 6;
cost &= 63;
// 16元硬币
coin += cost >> 4;
cost &= 15;
// 4元硬币
coin += cost >> 2;
cost &= 3;
// 1元硬币
coin += cost;
cout << coin;
}
优化版
int main()
{
wint_t N;
cin >> N;
wint_t cost = 1024 - N, coin = 0;
for (int8_t b = 6; b >= 0; b -= 2)
{
coin += cost >> b;
cost &= (1 << b) - 1;
}
cout << coin;
}