Поломав голову 2 часа родил такую конструкцию. Все нормально рассчитывает для десятков, сотен, тысяч и наверное т.д(дальше не проверял). Для одной цифры работать скорее всего не будет, но в таком случае можно просто поставить для, например, "7" return "7" и все. Но суть в другом. Валидатор не засчитывает toOctal(int), хотя toDecimal(int) засчитал, а они абсолютно идентичные меняется только "10" на "8" и наоборот. Что у меня не так?
package com.javarush.task.pro.task09.task0905;
import java.util.regex.Pattern;
/*
Восьмеричный конвертер
*/
public class Solution {
public static void main(String[] args) {
int decimalNumber = 1006;
System.out.println("Десятичное число " + decimalNumber + " равно восьмеричному числу " + toOctal(decimalNumber));
int octalNumber = 1756;
System.out.println("Восьмеричное число " + octalNumber + " равно десятичному числу " + toDecimal(octalNumber));
}
public static int toOctal(int decimalNumber) {
//напишите тут ваш код
int sum = 0;
for (int a = 1; ((int) Math.pow(8,a-1))<decimalNumber;a++){
int b;
if (a==1){
b = decimalNumber % ((int) Math.pow(8,a));
sum = b;
} else {
b = (decimalNumber % ((int) Math.pow(8,a)) - (decimalNumber % ((int) Math.pow(8,a-1))))/((int) Math.pow(8,a-1));
sum = sum + (b* ((int) Math.pow(10,a-1)));
}
}
return sum;
}
public static int toDecimal(int octalNumber) {
//напишите тут ваш код
int sum = 0;
for (int a = 1; ((int) Math.pow(10,a-1))<octalNumber;a++){
int b;
if (a==1){
b = octalNumber % ((int) Math.pow(10,a));
sum = b;
} else {
b = (octalNumber % ((int) Math.pow(10,a)) - (octalNumber % ((int) Math.pow(10,a-1))))/((int) Math.pow(10,a-1));
sum = sum + (b* ((int) Math.pow(8,a-1)));
}
}
return sum;
}
}