Десятичная ошибка преобразования

Я пишу программу, которая преобразует восьмеричные числа в десятичные. Он компилируется правильно и все, но с моим кодом преобразования что-то не так. Мне это кажется совершенно логичным, однако каким-то образом, когда я запускаю программу, преобразования выполняются неправильно (то есть 1 преобразуется в 36), может кто-то указать, что идет не так?

 public static int convert(int octal)
{
    int d1=0,d2=0,d3=0,d4=0,d5=0,d6=0,d7=0,d8=0;

    if(octal >=9999999){
    d8 = (octal-(octal%10000000));}
    if(octal >=999999){
    d7 = (octal-(octal%1000000));}
    if(octal >=99999){
    d6 = (octal-(octal%100000));}
    if(octal >=9999){
    d5 = (octal-(octal%10000));}
    if(octal >= 999){
    d4 = (octal-(octal%1000));}
    if(octal >= 99){
    d3 = (octal-(octal%100));}
    if(octal >= 9){
    d2 = (octal-(octal%10));}
    if(octal >= 0){
    d1 = (octal-(octal%1));}


    octal = (d8 * 8^7) + (d7 * 8^6) + (d6 * 8^5) + (d5 * 8^4) + (d4 * 8^3) + (d3 * 8^2) + (d2 * 8^1) + (d1 * 8^0);

    return octal;

}

это всего лишь мой метод convert, мой основной метод - это то, что собирает int;

Ответы на вопрос(4)

Ваш ответ на вопрос