Доброго времени суток, дамы и господа, уже хз сколько бьюсь над этой задачей, проблема в конвертере 2-10. Трабл в том, что, вроде как, алгоритм составлен правильно, если руками складывать степени - все зашибись, все работает, на всех этапах только положительные числа, элементы массива тоже ровно вытаскиваются, везде единички, как и положено, все красиво, чинно и благородно. Но почему-то, если прогонять именно по переменной decimalNumber, на 25 и 26 степени получаются отрицательные числа, как итог - финальный результат получается кривой. Помогите, пожалуйста, понять, в чем кроется косяк, моего мозга, увы, не хватает...
package com.javarush.task.pro.task09.task0906;
import java.util.regex.Pattern;
/*
Двоичный конвертер
*/
public class Solution {
public static void main(String[] args) {
int decimalNumber = Integer.MAX_VALUE;
System.out.println("Десятичное число " + decimalNumber + " равно двоичному числу " + toBinary(decimalNumber));
String binaryNumber = "1111111111111111111111111111111"; //31
System.out.println("Двоичное число " + binaryNumber + " равно десятичному числу " + toDecimal(binaryNumber));
}
public static String toBinary(int decimalNumber) {
String binaryNumber = "";
if (decimalNumber<=0)
{
return binaryNumber;
}
while (decimalNumber!=0)
{
binaryNumber=(decimalNumber%2)+binaryNumber;
decimalNumber=decimalNumber/2;
}
return binaryNumber;
}
public static int toDecimal(String binaryNumber) {
char[] chArray = binaryNumber.toCharArray();
int stage = (chArray.length)-1;
//System.out.println(stage);
int decimalNumber = 0;
if (binaryNumber.equals(null) || binaryNumber.isEmpty() || binaryNumber.equals(""))
{
return 0;
}
for (int i=0; i<(chArray.length); i++)
{
int j = (int) Math.pow(2,stage);
//System.out.println(j);
decimalNumber=decimalNumber+((chArray[i])*j);
//System.out.println(chArray[i]);
//System.out.println(stage);
stage--;
//System.out.println(decimalNumber);
}
return decimalNumber;
}
}