1. 题目解析与需求拆解
这道PTA(程序设计类实验辅助教学平台)的基础练习题看似简单,却涵盖了多个编程核心知识点。题目要求对N个分数进行求和运算,最终输出最简分数形式。作为20分值的题目,其难点不在于算法复杂度,而在于对基础编程能力和细节处理能力的全面考察。
1.1 输入输出规范分析
输入首行给出正整数N(≤100),随后N行按格式"a/b"给出分数。输出要求和的整数部分与分数部分,需满足:
- 若结果为整数则仅输出整数
- 若分数部分分母为1则简化为整数
- 若整数部分为0则只输出分数部分
- 所有输出必须为最简形式
1.2 核心算法需求
实现需要三个关键能力:
- 分数输入解析:正确处理"a/b"格式字符串
- 分数累加运算:实现通分、约分功能
- 结果格式化:按规则处理整数/分数输出
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术实现方案设计
2.1 数据结构选择
采用结构体存储分数是最清晰的方案:
c复制typedef struct {
long numerator; // 分子
long denominator; // 分母
} Fraction;
使用long类型可防止运算溢出(虽然题目未明确数据范围,但这是良好习惯)
2.2 核心算法流程
- 初始化累加器为0/1
- 逐个读取分数:
- 解析字符串获取分子分母
- 与累加器分数相加
- 计算结果的最简形式
- 按规则格式化输出
2.3 关键函数设计
c复制// 最大公约数(GCD)计算
long gcd(long a, long b) {
return b == 0 ? a : gcd(b, a % b);
}
// 分数相加运算
Fraction add(Fraction a, Fraction b) {
Fraction result;
result.denominator = a.denominator * b.denominator;
result.numerator = a.numerator * b.denominator + b.numerator * a.denominator;
long common = gcd(abs(result.nu
