题解 | #找零# 位运算

基础版

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;
}
全部评论

相关推荐

仁者伍敌:难怪小公司那么挑剔,让你们这些大佬把位置拿了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务