#1650. 珅泽教育CSP-J第一轮模拟考第五套 第 44 题

珅泽教育CSP-J第一轮模拟考第五套 第 44 题

第2题

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

  1
3--
 30

当输入是一个真分数时,请将它化简后输出,且忽略整数部分,例如当 a/b=30/100a/b=30/100 时,输出

 3
--
10

当输入的分数可以变成整数时,忽略它分数部分。注意输出的所有分数都应该是既约的。

#include<iostream>

int len(int n) {
    int length = 0;
    while (n > 0) {
        n/=10;
        length++;
    }
    return length;
}

void print(int n, char ch) {
    while (n-->0) std::cout << ch;
}
int main()
{
    int a, b;
    char dummy;
    std::cin >> a >> dummy >> b;
    int p = a;
    int q = b;
    while (a != 0 and b != 0) {
        if (a >= b) a %= b;
        else b %= a;
    }
    int gcd;
    if ( ____(1)____ ) gcd = b;
    else gcd = a;
    int i = p / q;
    p %= q;
    p /= gcd;
    q /= gcd;
    if ( ____(2)____ ) {
        std::cout << i << "\n";
    }
    else {
        int i_len = len(i);
        int p_len = len(p);
        int q_len = len(q);
        ____(3)____ ;
        std::cout << ____(4)____ << "\n";
        if (i != 0) std::cout << i ;
        ____(5)____ ;
        std::cout << "\n";
        ____(6)____ ;
        std::cout << ____(7)____ << "\n";
    }
}

(5) 处应填( )。

{{ select(1) }}

  • print(i_len, ' ')
  • print(i_len, '-')
  • print(q_len, ' ')
  • print(q_len, '-')