gpt4 book ai didi

java - 使用java在base -2中创建二进制数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:34:02 24 4
gpt4 key购买 nike

我有一个数字值的函数:

val = sum{(A[i])*(-2)^i}

因此可以通过 s.t. 来表示位数组中的值。 -8[0,0,0,1]8[0,0,0,1,1]

请帮我写一个 java 方法,当我将一个十进制值传递给一个方法时,它会返回一个 int 数组,其中 1 和 0 代表给定的十进制值。

Ex: when pass -8 , method returns [0,0,0,1].
when pass 8 , method returns [0,0,0,1,1].

最佳答案

-8 in base -2 应该是 [0,0,0,1] 而不是 [0,1, 0,1] 根据定义 val = sum{(A[i])*(-2)^i}

下面是处理负碱基的代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Binary {

public static void main(String[] args) {
System.out.println("Started");
Scanner scan = new Scanner(System.in);
System.out.println("Enter an integer : ");
int num = Integer.parseInt(scan.nextLine());
System.out.println("Enter base to convert to: ");
int base = Integer.parseInt(scan.nextLine());

scan.close();

Integer[] bitArray = convertToBaseArray(num, base);

System.out.println(Arrays.toString(bitArray));
}

private static Integer[] convertToBaseArray(int num, int base) {
if(base == 0) {
throw new RuntimeException("base can not be 0");
} else if(num < 0 && base > 0) {
throw new RuntimeException("positive base can not produce negative number");
}
List<Integer> bitList = new ArrayList<Integer>();

int absoluteBase = Math.abs(base);
if(base == 1) {
//this is not unique, creating shortest bit array
for(int i = 0; i < Math.abs(num); i++) {
bitList.add(1);
}
} else if(base == -1) {
//this is not unique, creating shortest bit array
int evenBit = num > 0 ? 0 : 1;
int oddBit = 1-evenBit;

for(int i = 0; i < 2*Math.abs(num); i+= 2) {
bitList.add(oddBit);
bitList.add(evenBit);
}
if(oddBit == 1) {
bitList.remove(bitList.size() -1);
}
} else {
while(num != 0) {
int remainder = num % base;
if(remainder < 0) {
remainder += absoluteBase;
num -= absoluteBase;
}
num = num / base;
bitList.add(remainder);
}
}
return bitList.toArray(new Integer[]{});
}

}

以下是一些示例运行:

Started
Enter an integer :
-8
Enter base to convert to:
-2
[0, 0, 0, 1]

Started
Enter an integer :
8
Enter base to convert to:
-2
[0, 0, 0, 1, 1]

Started
Enter an integer :
8
Enter base to convert to:
-5
[3, 4, 1]

Started
Enter an integer :
4
Enter base to convert to:
1
[1, 1, 1, 1]

Started
Enter an integer :
4
Enter base to convert to:
-1
[1, 0, 1, 0, 1, 0, 1]

Started
Enter an integer :
-4
Enter base to convert to:
-1
[0, 1, 0, 1, 0, 1, 0, 1]

关于java - 使用java在base -2中创建二进制数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34248567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com