PTA基础编程题目集 7-24 约分最简分式(C语言实现)

摘要 :本题要求编写一个分数约分程序,输入形如 分子/分母 的分数,通过辗转相除法求出分子与分母的最大公约数,再将两者同时除以该公约数,输出最简分式。当分子大于分母或两者相等时,仍保持分数形式输出。

题目描述

分数可以表示为分子 / 分母的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如 6/12 可以被约分为 1/2。当分子大于分母时,不需要表达为整数又分数的形式,即 11/8 还是 11/8;而当分子分母相等时,仍然表达为 1/1 的分数形式。

输入格式:

输入在一行中给出一个分数,分子和分母中间以斜杠 / 分隔,如:12/34 表示 34 分之 12。分子和分母都是正整数(不包含0,如果不清楚正整数的定义的话)。

提示:

对于 C 语言,在 scanf 的格式字符串中加入 /,让 scanf 来处理这个斜杠。

对于 Python 语言,用 a, b = map(int, input().split('/')) 这样的代码来处理这个斜杠。

输出格式:

在一行中输出这个分数对应的最简分式,格式与输入的相同,即采用分子/分母的形式表示分数。如 5/6 表示 6 分之 5。

输入样例:

in 复制代码
66/120

输出样例:

out 复制代码
11/20

算法流程图

#mermaid-svg-bJ6VqgmfAlomVoqy{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-bJ6VqgmfAlomVoqy .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-bJ6VqgmfAlomVoqy .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-bJ6VqgmfAlomVoqy .error-icon{fill:#552222;}#mermaid-svg-bJ6VqgmfAlomVoqy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bJ6VqgmfAlomVoqy .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-bJ6VqgmfAlomVoqy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bJ6VqgmfAlomVoqy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bJ6VqgmfAlomVoqy .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-bJ6VqgmfAlomVoqy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bJ6VqgmfAlomVoqy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bJ6VqgmfAlomVoqy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bJ6VqgmfAlomVoqy .marker.cross{stroke:#333333;}#mermaid-svg-bJ6VqgmfAlomVoqy svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bJ6VqgmfAlomVoqy p{margin:0;}#mermaid-svg-bJ6VqgmfAlomVoqy .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-bJ6VqgmfAlomVoqy .cluster-label text{fill:#333;}#mermaid-svg-bJ6VqgmfAlomVoqy .cluster-label span{color:#333;}#mermaid-svg-bJ6VqgmfAlomVoqy .cluster-label span p{background-color:transparent;}#mermaid-svg-bJ6VqgmfAlomVoqy .label text,#mermaid-svg-bJ6VqgmfAlomVoqy span{fill:#333;color:#333;}#mermaid-svg-bJ6VqgmfAlomVoqy .node rect,#mermaid-svg-bJ6VqgmfAlomVoqy .node circle,#mermaid-svg-bJ6VqgmfAlomVoqy .node ellipse,#mermaid-svg-bJ6VqgmfAlomVoqy .node polygon,#mermaid-svg-bJ6VqgmfAlomVoqy .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bJ6VqgmfAlomVoqy .rough-node .label text,#mermaid-svg-bJ6VqgmfAlomVoqy .node .label text,#mermaid-svg-bJ6VqgmfAlomVoqy .image-shape .label,#mermaid-svg-bJ6VqgmfAlomVoqy .icon-shape .label{text-anchor:middle;}#mermaid-svg-bJ6VqgmfAlomVoqy .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-bJ6VqgmfAlomVoqy .rough-node .label,#mermaid-svg-bJ6VqgmfAlomVoqy .node .label,#mermaid-svg-bJ6VqgmfAlomVoqy .image-shape .label,#mermaid-svg-bJ6VqgmfAlomVoqy .icon-shape .label{text-align:center;}#mermaid-svg-bJ6VqgmfAlomVoqy .node.clickable{cursor:pointer;}#mermaid-svg-bJ6VqgmfAlomVoqy .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-bJ6VqgmfAlomVoqy .arrowheadPath{fill:#333333;}#mermaid-svg-bJ6VqgmfAlomVoqy .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bJ6VqgmfAlomVoqy .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bJ6VqgmfAlomVoqy .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bJ6VqgmfAlomVoqy .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-bJ6VqgmfAlomVoqy .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bJ6VqgmfAlomVoqy .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-bJ6VqgmfAlomVoqy .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bJ6VqgmfAlomVoqy .cluster text{fill:#333;}#mermaid-svg-bJ6VqgmfAlomVoqy .cluster span{color:#333;}#mermaid-svg-bJ6VqgmfAlomVoqy 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-bJ6VqgmfAlomVoqy .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-bJ6VqgmfAlomVoqy rect.text{fill:none;stroke-width:0;}#mermaid-svg-bJ6VqgmfAlomVoqy .icon-shape,#mermaid-svg-bJ6VqgmfAlomVoqy .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bJ6VqgmfAlomVoqy .icon-shape p,#mermaid-svg-bJ6VqgmfAlomVoqy .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-bJ6VqgmfAlomVoqy .icon-shape .label rect,#mermaid-svg-bJ6VqgmfAlomVoqy .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bJ6VqgmfAlomVoqy .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-bJ6VqgmfAlomVoqy .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-bJ6VqgmfAlomVoqy :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是

开始
输入分数 (分子/分母)
初始化 a=分子, b=分母
b != 0 ?
temp = b

b = a % b

a = temp
最大公约数 = a
分子 = 分子 / gcd

分母 = 分母 / gcd
输出最简分式
结束

代码部分实现

c 复制代码
#include <stdio.h>

// 使用辗转相除法求两个数的最大公约数
// 算法原理:gcd(a, b) = gcd(b, a mod b),直到余数为0,此时的除数即为最大公约数
int gcd(int a, int b) {
    while (b != 0) {
        int temp = b;       // 保存当前的除数
        b = a % b;          // 用当前除数除当前被除数,得到新的余数
        a = temp;           // 将原除数作为下一轮的被除数
    }
    return a;               // 当b为0时,a即为最大公约数
}

int main() {
    int numerator, denominator;
    // 以"分子/分母"的格式输入分数,scanf中的/会被自动跳过
    scanf("%d/%d", &numerator, &denominator);
    
    // 求出分子和分母的最大公约数
    int common_divisor = gcd(numerator, denominator);
    
    // 分子分母同时除以最大公约数,得到最简分式
    int simplified_num = numerator / common_divisor;
    int simplified_den = denominator / common_divisor;
    
    // 输出最简分式
    printf("%d/%d\n", simplified_num, simplified_den);
    
    return 0;
}
相关推荐
Cachel wood20 小时前
hands-on-modern-rl:动手学强化学习 贝尔曼方程
开发语言·网络·python·学习·embedding
深圳市快瞳科技有限公司20 小时前
宠物生物特征识别:鼻纹、面部与多模态融合技术的突破
人工智能·算法·计算机视觉·宠物
格兰芬多呼神护卫20 小时前
# Agent 企业评估方案深度分析:从“看答案”到持续质量闭环_码士教育
java·开发语言·jvm
豆角焖肉20 小时前
冒泡、快排、堆排的实现逻辑与选择思路
java·算法·排序算法·快排·冒泡·堆排
这就是佬们吗20 小时前
回溯算法三板斧---掌握「回溯三问」思考模板快速入门回溯
java·数据库·算法
zander25820 小时前
LeetCode 78. 子集
算法·leetcode·深度优先
weixin_5859511721 小时前
CH592F 2.4G 低功耗
c语言·开发语言
秋田君21 小时前
QT_QInputDialog类输入对话框
开发语言·qt
name好难取诶21 小时前
通过对云基座和离线基座的对比,帮助开发者理解如何在不同场景下选择合适的打包方案。 什么是“基座” 在 UniApp 中,基座(也称“ ...
开发语言·uni-app·php