1 条题解

  • 0
    @ 2025-5-19 13:11:34

    题意分析

    题目要求计算有理数在77进制下的展开形式,并提取小数点后指定位置范围内的数字。具体规则如下:

    1. 77进制展开

      • 给定有理数nd\frac{n}{d}0n5,0000 \leq n \leq 5,0001d5,0001 \leq d \leq 5,000),计算其在7进制下的小数部分。
      • 例如:
        • 15\frac{1}{5}77进制展开为0.12541...70.12541..._7
        • 334\frac{33}{4}77进制展开为11.15151...711.15151..._7
    2. 数字提取

      • 输入指定起始位置bb和结束位置ee0b,e2500 \leq b, e \leq 2500(eb)200 \leq (e - b) \leq 20)。
      • 位置00表示小数点后的第一位。
      • 输出从位置bbee的数字序列。

    解题思路

    关键点分析

    1. 7进制小数展开

      • 使用长除法计算nd\frac{n}{d}77进制小数部分。
      • 每次除法步骤:
        1. 将当前余数乘以77
        2. 计算商(即当前小数位的数字)。
        3. 更新余数为新的余数。
        4. 重复直到达到所需精度。
    2. 数字提取

      • 需要计算足够多的小数位以覆盖位置ee
      • 存储小数位的数字序列,直接提取bbee的子序列。
    3. 边界处理

      • 如果n=0n=0,则小数部分全为00
      • 如果nd\frac{n}{d}是整数,则小数部分全为00

    解决步骤

    1. 输入处理

      • 读取问题集数量。
      • 对每个问题集,读取nnddbbee
    2. 7进制展开计算

      • 初始化余数为nmoddn \mod d
      • 重复长除法直到计算到位置ee的小数位:
        • 余数=余数×7= \text{余数} \times 7
        • 当前数字=余数//d= \text{余数} // d
        • 余数=余数modd= \text{余数} \mod d
        • 如果余数为00,则后续小数位全为00
    3. 数字提取与输出

      • 存储小数位的数字序列。
      • 提取从bbee的子序列作为结果。
      • 格式化输出。

    算法复杂度

    • 时间复杂度:O(e)O(e),每个问题集最多计算250250位小数。
    • 空间复杂度:O(e)O(e),存储小数位的数字序列。

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
     
    int main()
    {
        int n,num,p,i,a,b,l,r;
        int ans[5050];
        scanf("%d",&n);
        for(num=1;num<=n;num++)
        {
            memset(ans,0,sizeof(ans));
            scanf("%d %d %d %d",&a,&b,&l,&r);
            p=a;
            a=a%b;
            int k=0;
            while(k<=r)
            {
                a=a*7;
                ans[k]=a/b;
                a=a%b;
                k++;
            }
            printf("Problem set %d: %d / %d, base 7 digits %d through %d: ",num,p,b,l,r);
            for(i=l;i<=r;i++)
            {
                printf("%d",ans[i]);
            }
            printf("\n");
        }
        return 0;
     
    }
    
    • 1

    信息

    ID
    1710
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    3
    已通过
    1
    上传者