2.
千万不要以为地球上的人类都用十进制数字。事实上,地球上不同国家、不同民族在用的数字系统多达十几套。例如新几内亚的 Oksapmin 人用的是 27 进制的数字系统,如上图所示,他们用身体的 27 个部位表示 27 个数字。例如他们管 1 叫“提普纳”,即一只手的大拇指;管 6 叫“都怕”,是指手腕;管 12 叫“纳塔”,指耳朵,等等。于是他们那里的 10 是十进制系统里的 27,20 是十进制里的 54 …… 当两个不同数字系统的人类碰到一起谈价钱,大家就很头痛了,于是搞了一个人工智能数字翻译,可以把数字从一个系统翻译到另一个系统。本题就请你来实现这个人工智能数字翻译功能。
输入格式:
输入在第一行中给出两个非负整数:A(≤108 —— 这里 108 是十进制数)和 D,其中 A 是 10 或 27 进制数,D 是 A 的进制,或者是 10,或者是 27。如果 A 是 27 进制数,我们用 0 - 9 表示前 10 个数,用 A - Q 表示后面 17 个数。
输出格式:
在一行中将输入的数字翻译成另一个进制系统的数字。
#include <iostream>
#include <string>
using namespace std;
string translateNumber(int number, int base) {
if (base == 10) {
// 将十进制数转换为27进制
string result = "";
while (number > 0) {
int remainder = number % 27;
if (remainder < 10) {
result = (char)('0'+remainder) + result;
number = number / 27;
}
else {
result = (char)('A' + remainder - 10) + result;
number = number / 27;
}
}
return result;
}
else if (base == 27) {
// 将27进制数转换为十进制
int result = 0;
string numString = to_string(number);
for (int i = 0; i < numString.size(); i++) {
char digit = numString[i];
if (digit < '0'||digit > '9')
{
result = result * 27 + (digit - 'A' + 10);
}
else
{
result = result * 27 + (digit - '0');
}
}
return to_string(result);
}
return "";
}
int main() {
int A, D;
cin >> A >> D;
string translatedNumber = translateNumber(A, D);
cout << translatedNumber << endl;
return 0;
}
供参考:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char A[10];
int D, tmp, i, r;
scanf("%s %d", A, &D);
if (D == 10) {
tmp = atoi(A); i = 0;
while (tmp) {
if (tmp % 27 > 9)
A[i++] = tmp % 27 - 10 + 'A';
else
A[i++] = tmp % 27 + '0';
tmp /= 27;
}
for (i--; i >= 0; i--)
printf("%c", A[i]);
}
else if (D == 27) {
tmp = 0; r = 1; i = 0;
while (A[i]) i++;
for (i--; i >= 0; i--) {
if (A[i] >= 'A' && A[i] <= 'Q')
tmp += (A[i] - 'A' + 10) * r;
else if (A[i] >= '0' && A[i] <= '9')
tmp += (A[i] - '0') * r;
r *= D;
}
printf("%d", tmp);
}
return 0;
}