1 条题解
-
0
题意分析
- 进制转换:需要在不同进制间进行数值运算,特别注意大数处理
- 模运算:计算大数对取模的结果
- 输出要求:结果必须以原进制的形式输出
解题思路
- 输入处理:将进制数和转换为十进制
- 模运算:在十进制下计算
- 结果转换:将十进制结果转换回进制
- 特殊情况:处理的情况(虽然题目保证为非负整数)
实现步骤
- 进制转换:
- 将进制字符串转换为十进制大整数
- 将进制字符串转换为十进制整数
- 模运算:
- 使用大数取模算法计算
- 结果转换:
- 将十进制结果转换为进制字符串
- 输出:输出转换后的进制结果
代码实现
/* 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
- 上传者