返回
AcWing 66场周赛:奇偶判断
见解分享
2023-12-04 09:58:19
各位程序员大家好,欢迎来到AcWing 66场周赛的题解文章。在这一期周赛中,我们遇到了这样一道题:
4606. 奇偶判断
问题
小 A 现在给你一个 16 进制字符串 s
,其中只包含 0-9
和 a-f
。将这个字符串看做是一个整数,求它是否为奇数。
输入格式:
第一行包含一个字符串 s
。
输出格式:
输出一行,如果 s
是奇数,输出 ODD
,否则输出 EVEN
。
样例输入:
aff
样例输出:
ODD
时间限制:
1s
内存限制:
512 MB
问题解析
虽然题目让我们看的是 16 进制字符串,但本题的重点在于将 16 进制字符串转化为 10 进制数后,判断其是否为奇数。
思路:
- 转化 16 进制为 10 进制: 将字符串中的每个字符转换为对应的 10 进制数字,然后按照 16 进制的权重累加得到最终的 10 进制数。
- 判断奇偶性: 判断 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 进制数,我们可以轻松地判断其是否为奇数。
希望这篇文章对各位有帮助。欢迎大家在评论区交流讨论,也欢迎关注我的博客,获取更多精彩内容。