1 条题解

  • 0

    题意分析

    1. 进制转换:需要在不同进制间进行数值运算,特别注意大数处理
    2. 模运算:计算大数ppmm取模的结果
    3. 输出要求:结果必须以原进制bb的形式输出

    解题思路

    1. 输入处理:将bb进制数ppmm转换为十进制
    2. 模运算:在十进制下计算pmodmp \mod m
    3. 结果转换:将十进制结果转换回bb进制
    4. 特殊情况:处理m=0m=0的情况(虽然题目保证mm为非负整数)

    实现步骤

    1. 进制转换
      • bb进制字符串pp转换为十进制大整数
      • bb进制字符串mm转换为十进制整数
    2. 模运算
      • 使用大数取模算法计算pmodmp \mod m
    3. 结果转换
      • 将十进制结果转换为bb进制字符串
    4. 输出:输出转换后的bb进制结果

    代码实现

    /* POJ2305 ZOJ1929 UVA10551 Basic remains */
     
    #include <iostream>
    #include <stdio.h>
     
    using namespace std;
     
    const int N = 1000;
    char p[N + 1], m[10];
     
    void print(int n, int base)
    {
        if(n) {
            int i = 0;
            while(n > 0) {
                p[i++] = '0' + n % base;
                n /= base;
            }
            while(--i >= 0)
                putchar(p[i]);
            putchar('\n');
        } else
            printf("0\n");
    }
     
    int solve(int base)
    {
        int mod = 0;
        for(int i = 0; m[i]; i++)
            mod = mod * base + m[i] - '0';
     
        int ans = 0;
        for(int i = 0; p[i]; i++) {
            ans = ans * base + p[i] - '0';
            ans %= mod;
        }
        return ans;
    }
     
    int main()
    {
        int b;
        while(~scanf("%d", &b) && b) {
            scanf("%s%s", p, m);
     
            print(solve(b), b);
        }
     
        return 0;
    }
    • 1

    信息

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