7-2人工智能数字翻译

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;
}
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/651333
  • 除此之外, 这篇博客: C语言实现八大排序算法详解及其性能之间的中的 这里需要对堆有一定的了解,堆就是一个比较特殊的完全二叉树,在最大堆里,每个节点的值都大于其左右两个孩子节点的值。这就是最大堆。反之就是最小堆。拿最大堆举例子,每次堆顶的元素值,不就是当前数列的最大吗?这不就成选择排序里的简单排序了吗?找完之后,将他和完全二叉树里最后一个结点的值进行交换,然后做一个自顶向下的自我调整,将他再次调整成一个完全二叉堆。第二次取最大的树,这时我们需要将上一次找到的结点屏蔽掉,不然会陷入一个死循环。无数次找完之后,再按层序的思想将二叉树里的数据遍历到一个数组当中,这时的数组为一个有序的数组。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 算法思想

供参考:

#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;
}