2023年GESP四级真题解析:幸运数的判定算法详解
一、问题背景
题目要求判断一个数是否为"幸运数",定义规则为:
从个位开始编号为第1位
奇数位数字要经过特殊变换
所有位数字相加的和是8的倍数
二、算法核心思想
三、完整代码解析(带详细注释)
#include <iostream> #include <string> using namespACe std; // 处理奇数位数字变换 int transformDigit(int digit) { digit *= 7; // 先乘以7 // 循环处理直到数字不大于9 while (digit > 9) { int sum = 0; // 计算各位数字之和 while (digit > 0) { sum += digit % 10; digit /= 10; } digit = sum; } return digit; } // 判断是否为幸运数 bool isLuckyNumber(long long num) { string s = to_string(num); int sum = 0; // 从个位开始(第1位),所以从字符串末尾开始处理 for (int i = s.length() - 1, pos = 1; i >= 0; i--, pos++) { int digit = s[i] - '0'; // 奇数位进行变换,偶数位保持不变 if (pos % 2 == 1) { digit = transformDigit(digit); } sum += digit; } // 判断和是否是8的倍数 return sum % 8 == 0; } int main() { int N; cin >> N; while (N--) { long long num; cin >> num; if (isLuckyNumber(num)) { cout << "T" << endl; } else { cout << "F" << endl; } } return 0; }
四、关键知识点详解
五、实际应用场景
校验码生成算法
数字加密变换
游戏特殊数值判定
数学趣味问题求解
六、学习建议
原创内容 转载请注明出处