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;
}
相关推荐
鹿角片ljp7 小时前
LeetCode 46. 全排列|吃透回溯
算法·leetcode·职场和发展
鼎艺创新科技7 小时前
不依赖 UE/Unity:我们如何从零搭建一套国产三维 GIS 渲染引擎
人工智能·算法·unity·游戏引擎·三维电子沙盘
剩下了什么7 小时前
float32 与 float64 精度陷阱:如何在 Go 中避免错误使用
开发语言·后端·golang
指尖时光.7 小时前
Three.js 超全入门综合案例
开发语言·javascript·ecmascript
暴力求解8 小时前
Linux网络---传输层协议TCP(二)
linux·服务器·开发语言·网络·tcp/ip
石头猫灯8 小时前
WordPress wp2shell 漏洞链完整拆解流程
网络·数据结构·安全·web安全
吴声子夜歌8 小时前
Java面试题——基础(一)
java·开发语言
小庞在加油8 小时前
WinDbg实战:QT/跨平台项目死锁与无响应问题排查指南
开发语言·qt·windbg·工具
Vae_Mars9 小时前
C#中的delegate委托
开发语言·c#
一直走下去-明9 小时前
简单的http抓包解包完整代码
开发语言·python