如何在 Java 中以不同的基数递增数组?

问题描述 投票:0回答:1

我需要在 Java 中执行此操作。

我有一个固定大小的整数数组,大小为

number_of_slots
,初始化为全0。

我需要创建一个函数,根据

number_base
的数基递增数组。

每个单独的值都应打印到屏幕上。

我不需要在打印到屏幕后存储单个数组值,因此一维数组应该可以工作。

number_of_slots
number_base
应该能够在程序中更改,重新编译,并使用更新的参数再次运行。

例如,如果

number_of_slots
为 3,
number_base
为 2,则输出应如下所示:

slot 2 is 0, slot 1 is 0, slot 0 is 0
slot 2 is 0, slot 1 is 0, slot 0 is 1
slot 2 is 0, slot 1 is 1, slot 0 is 0
slot 2 is 0, slot 1 is 1, slot 0 is 1
slot 2 is 1, slot 1 is 0, slot 0 is 0
slot 2 is 1, slot 1 is 0, slot 0 is 1
slot 2 is 1, slot 1 is 1, slot 0 is 0
slot 2 is 1, slot 1 is 1, slot 0 is 1

如果

number_of_slots
为 2 并且
number_base
为 3,则输出应如下:

slot 1 is 0, slot 0 is 0
slot 1 is 0, slot 0 is 1
slot 1 is 0, slot 0 is 2
slot 1 is 1, slot 0 is 0
slot 1 is 1, slot 0 is 1
slot 1 is 1, slot 0 is 2
slot 1 is 2, slot 0 is 0
slot 1 is 2, slot 0 is 1
slot 1 is 2, slot 0 is 2

是否有一个我似乎找不到的内置函数可以做到这一点?或者有人对如何做到这一点有建议吗?

我在谷歌上搜索过这个,但除了以 10 为基数的里程表外,找不到其他里程表。

java arrays radix
1个回答
0
投票

“如何在 Java 中以不同的数基递增数组?...”

它不是语法的一部分,您需要实现它。

这里是将 x 转换为 基数r 的示例。

StringBuilder s = new StringBuilder();
int x = 1234, r = 5;
while (x > 0) {
    s.append(x % r);
    x /= r;
}
s.reverse();

并且,要转换回 10radix,您可以使用 Integer#parseInt 方法。

int x = Integer.parseInt("14414", r);

“...我需要创建一个函数,根据

number_base
的数基递增数组。...

...
number_of_slots
number_base
应该能够在程序中更改、重新编译并使用更新的参数再次运行。 ...”

我不相信我理解这个抽象。
如果您可以提供更多信息,我很乐意提供帮助。

如果您想将特定radix的两个值相加,可以使用以下内容。
我在这里使用 long 值,您甚至可能想切换到 BigInteger

String convert(long x, long r) {
    StringBuilder s = new StringBuilder();
    while (x > 0) {
        s.append(x % r);
        x /= r;
    }
    return s.reverse().toString();
}

String add(String a, String b, int r) {
    return convert(Long.parseLong(a, r) + Long.parseLong(b, r), r);
}

这是一个示例用法。

long a = 1234, b = 4321, x = a + b;
System.out.printf("%5s + %6s = %6s%n", a, b, x);
String g = convert(1234, 5), h = convert(4321, 5),
       i = add(g, h, 5);
System.out.printf("%5s + %6s = %6s%n", g, h, i);

输出

 1234 +   4321 =   5555
14414 + 114241 = 134210
© www.soinside.com 2019 - 2024. All rights reserved.