#1587. 珅泽教育CSP-J第一轮模拟考第四套 第 26 题

珅泽教育CSP-J第一轮模拟考第四套 第 26 题

第2题

#include<iostream>
int main()
{
    int q[2000] = {10};
    int s[2000] = {0};
    int size = 1;
    char c;
    while (std::cin >> c) {
        int d = c - '0';
        int r = 0;
        for (int i = 0; i < size; ++i) {
            r = r * 10 + q[i];
            q[i] = r / 8;
            r = r % 8;
        }
        while (r > 0) {
            r = r * 10;
            q[size] = r / 8;
            size++;
            r = r % 8;
        }
        for (int i = 0; i < size; ++i)
            s[i] += q[i] * d;
        for (int i = size; i > 0; --i) {
            s[i-1] += s[i] / 10;
            s[i] %= 10;
        }
    }
    while (size > 0 and s[size-1] == 0)
        size --;
    for (int i = 0; i < size; ++i)
        std::cout << s[i];
    std::cout << "\n";
}

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

{{ select(1) }}

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