I want to convert binary to an integer, multiply it by 17, then convert it back to binary. This is my code:
Scanner scan = new Scanner(System.in);
String n = scan.nextLine();
long j = Long.parseLong(n, 2);
j = j * 17;
System.out.println(Long.toBinaryString(j));
I originally made j an int but changed it once I got a bigger test case:
10001111110001000101000001000100111100110101100011000011011001111000100110110000110101110101100001001100010111000101000100010010011000000010010
It had a NumberFormatException, which makes sense because longs can only store a limited amount of digits, so are there any datatypes for very long integers?
Did you tried BigInteger or BigDecimal.
https://www.baeldung.com/java-bigdecimal-biginteger
These two types are specifically meant for situations where numbers are required to have a large or arbitrary range like some value > or = to 1x10^307 and less than 1x10^-307
public void whenBigDecimalCreated_thenValueMatches() {
BigDecimal bdFromString = new BigDecimal("0.1");
BigDecimal bdFromCharArray = new BigDecimal(new char[] {'3','.','1','6','1','5'});
BigDecimal bdlFromInt = new BigDecimal(42);
BigDecimal bdFromLong = new BigDecimal(123412345678901L);
BigInteger bigInteger = BigInteger.probablePrime(100, new Random());
BigDecimal bdFromBigInteger = new BigDecimal(bigInteger);
assertEquals("0.1",bdFromString.toString());
assertEquals("3.1615",bdFromCharArray.toString());
assertEquals("42",bdlFromInt.toString());
assertEquals("123412345678901",bdFromLong.toString());
assertEquals(bigInteger.toString(),bdFromBigInteger.toString());
}
That should help you .