Verilog中repeat关键字的本质、应用场景与最佳实践
2026/8/2 4:16:32
摘要:本题要求计算两个分数形式有理数的和,输入以
a1/b1 a2/b2格式给出,需通分、约分后输出最简分数;若分母为 1 则仅输出分子。核心考察分数通分、辗转相除法求最大公约数及约分处理。
本题要求编写程序,计算两个有理数的和。
输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的正整数。
在一行中按照 a/b 的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
1/3 1/64/3 2/31/22#include<stdio.h>// 引入标准输入输出头文件intgcd(inta,intb){// 辗转相除法求最大公约数returnb==0?a:gcd(b,a%b);// 递归调用,直到余数为0}intmain(){inta1,b1,a2,b2;// 定义两个有理数的分子和分母scanf("%d/%d %d/%d",&a1,&b1,&a2,&b2);// 按格式读取两个分数intnumerator=a1*b2+a2*b1;// 计算通分后的分子:a1*b2 + a2*b1intdenominator=b1*b2;// 计算通分后的分母:b1*b2intg=gcd(numerator,denominator);// 求分子和分母的最大公约数numerator/=g;// 分子除以最大公约数进行约分denominator/=g;// 分母除以最大公约数进行约分if(denominator==1){// 如果分母为1printf("%d\n",numerator);// 只输出分子}else{printf("%d/%d\n",numerator,denominator);// 输出最简分数形式}return0;// 程序正常结束}