Run ID:2636

提交时间:2024-01-20 13:30:39

#include <stdio.h> #include <stdlib.h> #include <string.h> char str[2000], another[2000]; int ten[2000]; int switchToTen(int m) { int i, j, len, k, c; len = strlen(str); k = 1; memset(ten, 0, sizeof(ten)); for (i = 0; i < len; i ++) { for (j = 0; j < k; j ++) { ten[j] *= m; } if (str[i] >= '0' && str[i] <= '9') { ten[0] += str[i] - '0'; }else if (str[i] >= 'A' && str[i] <= 'Z') { ten[0] += str[i] - 'A' + 10; }else if (str[i] >= 'a' && str[i] <= 'z') { ten[0] += str[i] - 'a' + 10; } for (j = c = 0; j < k; j ++) { ten[j] += c; if (ten[j] >= 10) { c = ten[j] / 10; ten[j] %= 10; }else { c = 0; } } while (c) { ten[k ++] = c % 10; c /= 10; } } int temp; for (i = 0, j = k - 1; i < j; i ++, j --) { temp = ten[i]; ten[i] = ten[j]; ten[j] = temp; } return k; } void switchToAnother(int k, int n) { int sum, i, r, t, d; sum = 1; r = 0; memset(another, 0, sizeof(another)); while (sum) { sum = 0; for (i = 0; i < k; i ++) { d = ten[i] / n; sum += d; if (i == k - 1) { t = ten[i] % n; if (t >= 0 && t <= 9) { another[r] = t + '0'; }else { another[r] = t - 10 + 'a'; } r ++; }else { ten[i + 1] += ten[i] % n * 10; } ten[i] = d; } } for (i = r - 1; i >= 0; i --) { printf("%c", another[i]); } printf("\n"); } int main() { int m, n, k; while (scanf("%d %d", &m, &n) != EOF) { scanf("%s", str); k = switchToTen(m); switchToAnother(k, n); } return 0; }