13902. 珅泽教育CSP-J第一轮模拟考第十九套 第 34 题

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

阅读程序第3题

阅读下面的程序,完成第29—35题。

void print(std::string in)
{
    int q[2000] = {10, 0};
    int out[2000] = {0};
    int size = 1;
    for (char c : in)
    {
        int r = 0;
        for (int i = 0; i < size; ++i) {
            r = r * 10 + q[i];
            q[i] = r / 2;
            r = r % 2;
        }
        while (r > 0) {
            r = r * 10;
            q[size] = r / 2;
            size++;
            r = r % 2;
        }

        int d = c - '0';
        int i = size - 1;
        while (true) {
            out[i] += q[i] * d;
            int carry = out[i] / 10;
            out[i] %= 10;
            if (i > 0) {
                --i;
                out[i] += carry;
            }
            else {
                break;
            }
        }
    }

    while (size > 1 && out[size-1] == 0) {
        size--;
    }
    for (int i = 0; i < size; ++i) {
        std::cout << out[i];
    }
}

在循环中,语句 r = r * 10 + q[i] 的作用是( )。

{{ select(1) }}

  • 将数组q直接拼接为一个整数
  • 模拟除法运算中的被除数(用于除以2)
  • 计算除法的余数
  • 扩展数组q的小数部分