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;
}
相关推荐
mmsx9 小时前
Android Dialog 插槽模式:用一套壳统一全应用的弹窗风格
android·java·dialog·开发语言
huanbailu9 小时前
Qt 跨线程信号槽:connect 返回 true 但槽函数不执行的坑
开发语言·c++·qt·信号槽·跨线程·元类型
u0111026759 小时前
工具页案例图如何编写 alt让图片说明与处理场景对应
java·前端·javascript·图像处理·人工智能·算法·ai作画
光子物联单片机9 小时前
STM32传感器模块编程实践(二十二)DIY智能WIFI视频控制小车
c语言·stm32·单片机·嵌入式硬件·音视频
ZealSinger9 小时前
Go slog生产落地LevelVar与共存
开发语言·后端·golang·go
阿狗童鞋9 小时前
数据结构与算法实战指南
数据结构·算法
落魄实习生9 小时前
Agent Scope Java 2.x 系列【11】AgentState 与状态存储
java·开发语言·ai
HEJOO99 小时前
C++ 虚函数表(vtable)深度解析
开发语言·c++
老王爱玩车10 小时前
深入理解指针5
c语言·开发语言·学习
Navigator_Z10 小时前
LeetCode //C - 1275. Find Winner on a Tic Tac Toe Game
c语言·算法·leetcode