Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

BigInteger mathematical functions not returning expected values

I have a BigInteger method which takes a string[] array input of 4 numbers, converts the numbers into an int[], and then applies numerous mathematical operations to it.

public BigInteger convert32Bit(String[] array)
{
    System.out.println("Array being converted is "+Arrays.toString(array)+"\n");
    int[] tempArray = new int[array.length];
    ArrayList<BigInteger> tempBigIntList = new ArrayList<BigInteger>();
    int i = 0;
    for(String s:array)
    {
        int power = 4-i;
        tempArray[i]= Integer.parseInt(s);
        String string = Integer.toString(tempArray[0]);
        BigInteger myBigInt = new BigInteger(string);
        BigInteger num2 = myBigInt.multiply(new BigInteger("256").pow(power));
        System.out.println(tempArray[i]+" is being multiplied by 256^"+power+" which equals "+num2);
        tempBigIntList.add(num2);
        i++;
    }

    BigInteger bigInt32Bit = new BigInteger("0");
    for(BigInteger bI:tempBigIntList)
    {
        bigInt32Bit.add(bI);
    }

    System.out.println("\nThe final value is "+bigInt32Bit);

    return bigInt32Bit;
}

However there is a problem. If I take the array "123", "0", "245", "23" as the input. I get the following output.

Wrong output

The output I am expecting is

Array being converted is [123, 0, 245, 23]

123 is being multiplied by 256^4 which equals 528280977408
0 is being multiplied by 256^3 which equals 0
245 is being multiplied by 256^2 which equals 16056320
23 is being multiplied by 256^1 which equals 5888

The final value is 528297039616

Can someone please help fix this?

like image 374
Dan Avatar asked Apr 14 '26 11:04

Dan


1 Answers

Replace this line

bigInt32Bit.add(bI);

with

bigInt32Bit = bigInt32Bit.add(bI);

You do this because BigInteger is immutable. This means that you have to create a new value for bigInt32Bit instead of just adjusting an old one. Also (as @justhalf says) replace the line

String string = Integer.toString(tempArray[0]);

with

String string = Integer.toString(tempArray[i]);

so that you use the correct value when applying the mathematical operators.

like image 81
4 revs, 2 users 77%Tagir Valeev Avatar answered Apr 15 '26 23:04

4 revs, 2 users 77%Tagir Valeev



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!