8.26华为机试第一题,求帮看问题,过了18.8%

#include <iostream>

using namespace std;

int main(void)
{
    int n = 0;
    unsigned int num = 0;
    unsigned int nums[1000] = {0};

    while ( cin >> num ) {
        unsigned int part1 = num & 0x5555;
        unsigned int part2 = num & 0xaaaa;
        part1 = part1 << 1;
        part2 = part2 >> 1;
        nums[n] = part1 | part2;
        n++;
    }
    unsigned int bit2_1 = 0;
    bit2_1 = nums[0] & 0x0003;
    nums[0] = nums[0] >> 2;
    for(int i = 1; i < n; i++) {
        unsigned int bit2_2 = nums[i] & 0x0003;
        nums[i] = nums[i] >> 2;
        bit2_1 = bit2_1 << 30;
        nums[i] = nums[i] ^ bit2_1;
        bit2_1 = bit2_2;
    }
    nums[0] = nums[0] ^ (bit2_1 << 30);
    for(int i = 0; i < n; i++) {
        cout << nums[i] << " ";
    }

    return 0;
}

#华为#
全部评论
找到了,这两行         unsigned int part1 = num & 0x5555;         unsigned int part2 = num & 0xaaaa; 应该是         unsigned int part1 = num & 0x55555555;         unsigned int part2 = num & 0xaaaaaaaa;
点赞 回复 分享
发布于 2020-08-27 00:00
为啥要用异或
点赞 回复 分享
发布于 2020-08-26 23:59

相关推荐

点赞 评论 收藏
分享
RajahnRan:公司赚到了,这可是一眼就手写出来的代码,ai都写不出来
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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