返回

AcWing 66场周赛:奇偶判断

见解分享

各位程序员大家好,欢迎来到AcWing 66场周赛的题解文章。在这一期周赛中,我们遇到了这样一道题:

4606. 奇偶判断

问题

小 A 现在给你一个 16 进制字符串 s,其中只包含 0-9a-f。将这个字符串看做是一个整数,求它是否为奇数。

输入格式:

第一行包含一个字符串 s

输出格式:

输出一行,如果 s 是奇数,输出 ODD,否则输出 EVEN

样例输入:

aff

样例输出:

ODD

时间限制:

1s

内存限制:

512 MB

问题解析

虽然题目让我们看的是 16 进制字符串,但本题的重点在于将 16 进制字符串转化为 10 进制数后,判断其是否为奇数。

思路:

  1. 转化 16 进制为 10 进制: 将字符串中的每个字符转换为对应的 10 进制数字,然后按照 16 进制的权重累加得到最终的 10 进制数。
  2. 判断奇偶性: 判断 10 进制数是否能被 2 整除。如果能整除,则为偶数,否则为奇数。

代码实现

#include <iostream>
#include <string>

using namespace std;

int main() {
    string s;
    cin >> s;

    int num = 0;
    int base = 1;
    for (int i = s.size() - 1; i >= 0; i--) {
        int digit;
        if (s[i] >= '0' && s[i] <= '9') {
            digit = s[i] - '0';
        } else {
            digit = s[i] - 'a' + 10;
        }
        num += digit * base;
        base *= 16;
    }

    if (num % 2 == 0) {
        cout << "EVEN" << endl;
    } else {
        cout << "ODD" << endl;
    }

    return 0;
}

复杂度分析

时间复杂度: O(n),其中 n 为字符串的长度。

空间复杂度: O(1),因为不需要额外空间来存储数据。

总结

本题考察了进制转换和奇偶性判断的基本知识。通过将 16 进制字符串转化为 10 进制数,我们可以轻松地判断其是否为奇数。

希望这篇文章对各位有帮助。欢迎大家在评论区交流讨论,也欢迎关注我的博客,获取更多精彩内容。