13838. 珅泽教育CSP-J第一轮模拟考第十八套 第 43 题

珅泽教育CSP-J第一轮模拟考第十八套 第 43 题

完善程序(2):分数化简与排版

给定一个分数 a / b,若它是假分数,请将它化简成带分数形式输出。例如 91 / 30 输出:

  1
3--
 30

当输入是真分数时,请将它化简后输出,并忽略整数部分。例如 30 / 100 输出:

 3
--
10

当输入的分数可以变成整数时,忽略分数部分。所有输出分数都应为既约分数。回答第 40—45 题。

#include <iostream>
using i64 = long long;

i64 gcd(i64 n, i64 m)
{
    if (m == 0) return n;
    else return gcd(m, n % m);
}

void print(char c, int a) {
    while (a > 0) {
        std::cout << c;
        a--;
    }
}

int length(int a) {
    if (a == 0) return 0;
    else return length(a / 10) + 1;
}

int main()
{
    i64 n, m;
    char c;
    std::cin >> n >> c >> m;
    auto d = ______(1)______;
    n = n / d;
    m = ______(2)______;
    auto z = ______(3)______;
    n = n % m;
    if (______(4)______) std::cout << z << "\n";
    else {
        print(' ', ______(5)______);
        std::cout << n << "\n";
        if (z > 0) std::cout << z;
        print('-', ______(6)______);
        std::cout << "\n";
        print(' ', length(z));
        std::cout << m << "\n";
    }
}

(4)处应填( )。

{{ select(1) }}

  • m == 0
  • z == 0
  • n == 0
  • d == 1