📄 pku1220.cpp
字号:
#include <stdio.h>
#include <string.h>
#define size 1000
#define UP 100000
int ans[size];
int val[size];
char s[size];
int base_A, base_B;
int val_size;
int c2n(char c)
{
if (c >= '0' && c <= '9')
return c - '0';
if (c >= 'A' && c <= 'Z')
return c - 'A' + 10;
if (c >= 'a' && c <= 'z')
return c - 'a' + 36;
}
char n2c(int x)
{
if (x < 10)
return x + '0';
if (x < 36)
return x - 10 + 'A';
return x - 36 + 'a';
}
void Add(int x)
{
int i = 0;
val[0] += x;
while (val[i] >= UP)
{
val[i + 1] += val[i] / UP;
val[i] %= UP;
i++;
}
while (val[val_size])
val_size++;
}
void Mul(int x)
{
int i;
for (i = 0; i < val_size; i++)
{
val[i] *= x;
}
for (i = 0; i < val_size; i++)
{
val[i + 1] += val[i] / UP;
val[i] %= UP;
}
while (val[val_size])
val_size++;
}
int Zero()
{
int i;
for (i = val_size; i >= 0; i--)
{
if (val[i])
return 0;
}
return 1;
}
int getMod(int X)
{
int i, tmp;
for (i = val_size; i > 0; i--)
{
val[i - 1] += val[i] % X * UP;
val[i] /= X;
}
tmp = val[0] % X;
val[0] /= X;
return tmp;
}
void Solve()
{
int i;
memset(ans, 0, sizeof(ans));
memset(val, 0, sizeof(val));
scanf("%d %d %s", &base_A, &base_B, s);
printf("%d %s\n%d ", base_A, s, base_B);
val_size = 0;
for (i = 0; i < strlen(s); i++)
{
Mul(base_A);
Add(c2n(s[i]));
}
i = 0;
if (Zero())
{
printf("0\n\n");
return;
}
while (!Zero())
{
ans[i] = getMod(base_B);
i++;
}
i--;
while (i >= 0)
{
printf("%c", n2c(ans[i--]));
}
printf("\n\n");
}
int main()
{
int T;
scanf("%d", &T);
while (T--)
Solve();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -