摘要:本题要求计算两个分数形式有理数的和,输入以 a1/b1 a2/b2 格式给出,需通分、约分后输出最简分数;若分母为 1 则仅输出分子。核心考察分数通分、辗转相除法求最大公约数及约分处理。
题目描述
本题要求编写程序,计算两个有理数的和。
输入格式:
输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的正整数。
输出格式:
在一行中按照 a/b 的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
输入样例:
1/3 1/6
4/3 2/3
输出样例:
1/2
2
代码部分实现
#include <stdio.h> // 引入标准输入输出头文件
int gcd(int a, int b) { // 辗转相除法求最大公约数
return b == 0 ? a : gcd(b, a % b); // 递归调用,直到余数为0
}
int main() {
int a1, b1, a2, b2; // 定义两个有理数的分子和分母
scanf("%d/%d %d/%d", &a1, &b1, &a2, &b2); // 按格式读取两个分数
int numerator = a1 * b2 + a2 * b1; // 计算通分后的分子:a1*b2 + a2*b1
int denominator = b1 * b2; // 计算通分后的分母:b1*b2
int g = gcd(numerator, denominator); // 求分子和分母的最大公约数
numerator /= g; // 分子除以最大公约数进行约分
denominator /= g; // 分母除以最大公约数进行约分
if (denominator == 1) { // 如果分母为1
printf("%d\\n", numerator); // 只输出分子
} else {
printf("%d/%d\\n", numerator, denominator); // 输出最简分数形式
}
return 0; // 程序正常结束
}
算法流程图
#mermaid-svg-XQIBNP9capZFPJCe{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-XQIBNP9capZFPJCe .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-XQIBNP9capZFPJCe .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-XQIBNP9capZFPJCe .error-icon{fill:#552222;}#mermaid-svg-XQIBNP9capZFPJCe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-XQIBNP9capZFPJCe .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-XQIBNP9capZFPJCe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-XQIBNP9capZFPJCe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-XQIBNP9capZFPJCe .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-XQIBNP9capZFPJCe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-XQIBNP9capZFPJCe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-XQIBNP9capZFPJCe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-XQIBNP9capZFPJCe .marker.cross{stroke:#333333;}#mermaid-svg-XQIBNP9capZFPJCe svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-XQIBNP9capZFPJCe p{margin:0;}#mermaid-svg-XQIBNP9capZFPJCe .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-XQIBNP9capZFPJCe .cluster-label text{fill:#333;}#mermaid-svg-XQIBNP9capZFPJCe .cluster-label span{color:#333;}#mermaid-svg-XQIBNP9capZFPJCe .cluster-label span p{background-color:transparent;}#mermaid-svg-XQIBNP9capZFPJCe .label text,#mermaid-svg-XQIBNP9capZFPJCe span{fill:#333;color:#333;}#mermaid-svg-XQIBNP9capZFPJCe .node rect,#mermaid-svg-XQIBNP9capZFPJCe .node circle,#mermaid-svg-XQIBNP9capZFPJCe .node ellipse,#mermaid-svg-XQIBNP9capZFPJCe .node polygon,#mermaid-svg-XQIBNP9capZFPJCe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-XQIBNP9capZFPJCe .rough-node .label text,#mermaid-svg-XQIBNP9capZFPJCe .node .label text,#mermaid-svg-XQIBNP9capZFPJCe .image-shape .label,#mermaid-svg-XQIBNP9capZFPJCe .icon-shape .label{text-anchor:middle;}#mermaid-svg-XQIBNP9capZFPJCe .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-XQIBNP9capZFPJCe .rough-node .label,#mermaid-svg-XQIBNP9capZFPJCe .node .label,#mermaid-svg-XQIBNP9capZFPJCe .image-shape .label,#mermaid-svg-XQIBNP9capZFPJCe .icon-shape .label{text-align:center;}#mermaid-svg-XQIBNP9capZFPJCe .node.clickable{cursor:pointer;}#mermaid-svg-XQIBNP9capZFPJCe .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-XQIBNP9capZFPJCe .arrowheadPath{fill:#333333;}#mermaid-svg-XQIBNP9capZFPJCe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-XQIBNP9capZFPJCe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-XQIBNP9capZFPJCe .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-XQIBNP9capZFPJCe .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-XQIBNP9capZFPJCe .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-XQIBNP9capZFPJCe .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-XQIBNP9capZFPJCe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-XQIBNP9capZFPJCe .cluster text{fill:#333;}#mermaid-svg-XQIBNP9capZFPJCe .cluster span{color:#333;}#mermaid-svg-XQIBNP9capZFPJCe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-XQIBNP9capZFPJCe .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-XQIBNP9capZFPJCe rect.text{fill:none;stroke-width:0;}#mermaid-svg-XQIBNP9capZFPJCe .icon-shape,#mermaid-svg-XQIBNP9capZFPJCe .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-XQIBNP9capZFPJCe .icon-shape p,#mermaid-svg-XQIBNP9capZFPJCe .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-XQIBNP9capZFPJCe .icon-shape .label rect,#mermaid-svg-XQIBNP9capZFPJCe .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-XQIBNP9capZFPJCe .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-XQIBNP9capZFPJCe .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-XQIBNP9capZFPJCe :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
是
否
输入 a1/b1 a2/b2
计算分子: a1*b2 + a2*b1
计算分母: b1*b2
调用 gcd(分子, 分母) 求最大公约数
分母 == 1?
输出分子
输出 分子/分母
网硕互联帮助中心


评论前必须登录!
注册