Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将基数为10的数字转换成带有字符的编号系统?_Java_C#_Algorithm - Fatal编程技术网

Java 如何将基数为10的数字转换成带有字符的编号系统?

Java 如何将基数为10的数字转换成带有字符的编号系统?,java,c#,algorithm,Java,C#,Algorithm,在以10为基数的编号系统中,每个数字可以是0到9。我想将每个数字的“分辨率”提高到0-9abc…自定义字母集。这样,我可以将一个大整数转换为一个较短的字母数字字符串表示形式 例如,数字102234类似于“A45”(“A45”不是我要寻找的实际答案,它只是为了说明由于有更多的数字,字符串版本会更短) 最好是C/C++/Java/C#答案。谢谢大家! (自定义字母集可以是非拉丁语言,不要采用ASCII)可以与基数一起使用: 输出: 2147483647 zik0zj 在C++中,我会做这样的事情:

在以10为基数的编号系统中,每个数字可以是0到9。我想将每个数字的“分辨率”提高到0-9abc…自定义字母集。这样,我可以将一个大整数转换为一个较短的字母数字字符串表示形式

例如,数字102234类似于“A45”(“A45”不是我要寻找的实际答案,它只是为了说明由于有更多的数字,字符串版本会更短)

最好是C/C++/Java/C#答案。谢谢大家!

(自定义字母集可以是非拉丁语言,不要采用ASCII)

可以与基数一起使用:

输出:

2147483647
zik0zj

在C++中,我会做这样的事情:< /P>
#include    <iostream>
#include    <string>
#include    <algorithm>

std::string ch_base (int i) {
    const std::string figures = "0123456789abcdefghijklmnopqrstuvwxyz";
    const int base = figures.length();
    std::string res;
    if (i == 0) return "0";
    while (i) {
        res += figures[i%base];
        i /= base;
    }
    int size = res.size();
    for (int i = 0; i < size/2; i++) {
        std::swap (res[i], res[size-i-1]);
    }
    return res;
}

int main() {
    int i = 102234;
    std::cout << i << " = " << ch_base(i) << "\n";
}

另外,我确实知道,但我想在这里做我自己的事情。为了简单起见,我指定了0-9A-Z,但实际上它将是0-9ABC…自定义的字母显示是
102234
类似于
A45
?它是哪个基地?您如何知道是
A45
baseX还是baseZ系统?您可以使用
Map
保存“自定义集”的所有转换,然后使用它转换数字。很确定这个问题太宽泛了,需要更多的关注。@Igor Krupin那么如果你只想要一个比数字版本短的
字符串
,那么使用@Eng.Fouad的答案有什么错?看来你没有给我们所有的信息。另外,如果您不发布任何代码,那么您编写的代码对我们没有任何好处。实际上,我的数字将是公元前0-9ABC…自定义字母集。看看你发布的函数,我想我不能指定一个自定义字母集。“A45”只是一个示例(不是实际值)!我只是想证明字符串版本最终会比数字版本短…@IgorKrupin看看
Integer.toString
是如何在OpenJDK上实现的:您可以修改数组
数字
以包含自定义字符集。查看OpenJDK代码,我可以,但我希望能更通用一些,并且能使用非拉丁语。但是谢谢你的链接。@IgorKrupin关于自定义字母集的问题没有任何内容。如果你指的是评论,那不是问题的一部分。如果您确实想要自定义字母,请编辑问题以澄清它。来看这个问题的人不应该为了理解这个问题而在所有的评论中混淆视听。我得到了102234的uv62。谢谢!!!就是这样!如果要使用非拉丁字符,可以查看
std::wstring
而不是
std::string
请注意,在我之前的代码中,字符的顺序是颠倒的。很抱歉更正。新的结果是102234的26vu。
#include    <iostream>
#include    <string>
#include    <algorithm>

std::string ch_base (int i) {
    const std::string figures = "0123456789abcdefghijklmnopqrstuvwxyz";
    const int base = figures.length();
    std::string res;
    if (i == 0) return "0";
    while (i) {
        res += figures[i%base];
        i /= base;
    }
    int size = res.size();
    for (int i = 0; i < size/2; i++) {
        std::swap (res[i], res[size-i-1]);
    }
    return res;
}

int main() {
    int i = 102234;
    std::cout << i << " = " << ch_base(i) << "\n";
}
std::string ch_base (int i) {
    const std::string figures = "0123456789abcdefghijklmnopqrstuvwxyz";
    const int base = figures.length();
    std::string res;
    if (i == 0) return "0";
    while (i) {
        res.push_back(figures[i%base]);
        i /= base;
    }
    return res;
}