Мыслительное упражнение на калькуляторе, основанное на добавлении или вычитании единицы в циклах.

Итак, в качестве мысленного упражнения я попытался написать очень простой калькулятор, который может выполнять такие функции, как сложение, вычитание, умножение, деление и вычисление степеней (и, в конечном итоге, корней), путем добавления или вычитания 1 с помощью циклов for. и вложенные для циклов.

Однако мне нужна помощь с функцией мощности (последний метод в коде ниже). Поскольку для умножения требуется один вложенный цикл for (третий метод, показанный ниже), я полагал, что функция степени будет просто еще на один или два уровня глубже. Но либо это не так, либо я неправильно кодирую, что, как я полагаю, более вероятно из двух.

import java.util.*;

public class Main {

public static Scanner scan = new Scanner(System.in);


public static void main(String[] args) {
    Power();


}

public static void addition() {

    System.out.println("Type first number to add: ");
    int num1 = scan.nextInt();
    System.out.println("Type second number to add");
    int num2 = scan.nextInt();
    int result = num1;
    while(num2 > 0){
        num2--;
        result++;
    }

    System.out.println("The result is: " + result);

}

public static void subtraction() {

    System.out.println("Type first number to subtract: ");
    int num1 = scan.nextInt();
    System.out.println("Type second number to subtract: ");
    int num2 = scan.nextInt();
    int result = num1;
    while(num2 > 0){
        num2--;
        result--;
    }

    System.out.println("The result is: " + result);

}

public static void multiplication() {

    System.out.println("Type first number to multiply: ");
    int num1 = scan.nextInt();
    System.out.println("Type second number to multiply: ");
    int num2 = scan.nextInt();
    int result = 0;


    for(int i = num1;i>0;i--){
        for(int x = num2;x>0;x--){
            result++;
        }

    }

    System.out.println("The result is: " + result);

}

public static void division() {

    System.out.println("Type first number to divide: ");
    int num1 = scan.nextInt();
    System.out.println("Type second number to divide: ");
    int num2 = scan.nextInt();
    int result = 0;

    for(;num2>0 && num1 > num2;num2--){
        result++;
        for(;num1 > num2;num1--){

        }
    }

    System.out.println("The result is: " + result);

}

public static void Power() {

System.out.println("Type Base Number: ");
int num1 = scan.nextInt();
System.out.println("Type Exponent: ");
int num2 = scan.nextInt();
int result = 0;

for(int i = num1;i>0;i--){
    for(int x = num1;x>0;x--){
        for(int y = num2; y>0; y--){
            for(int z = num2; z>0;z--){
                result++;
            }
        }
    }

}



System.out.println("The result is: " + result);

}


}

person A. Salas    schedule 12.11.2016    source источник


Ответы (1)


Вы можете сделать что-то вроде этого. Это немного более модульно, но если вы хотите, чтобы это был один полный цикл, вы можете просто поместить код внутри функции умножения в функцию мощности.

public int mulitply(int x, int y) {
    int product = 0;
    for (int i = 0; i < y; i++) {
       for (int j = 0; j < x; j++) {
          product++;
       }
    }
    return product;
}

public int power(int x, int exponent) {
    int result = 1;
    for (int i = 0; i < exponent; i++) {
        result = multiply(result, x);
    }
    return result;
}

Комбинированный:

public int power(int x, int exponent) {
    int result = 1;
    for (int i = 0; i < exponent; i++) {            
        int product = 0;
        for (int j = 0; j < x; j++) {
            for (int k = 0; k < result; k++) {
                product++;
            }
        }
        result = product;
    }
    return result;
}
person cullan    schedule 12.11.2016
comment
Спасибо за ответ, но мне было интересно, есть ли способ сделать это, просто используя вложенные циклы for? Пока что я обнаружил, основываясь на моем текущем коде, что количество необходимых вложенных циклов равно показателю степени. Например, для 4^4 потребуется 4 цикла for (три из них вложенные). Наверняка есть более простой способ сделать это правильно? - person A. Salas; 12.11.2016
comment
Я объединил его, чтобы использовать вложенные циклы. Это то, что вы искали? - person cullan; 12.11.2016
comment
Потрясающий! Это работает отлично. Не могли бы вы взглянуть на мой код и объяснить, где я ошибся, если можете? В очередной раз благодарим за помощь! - person A. Salas; 12.11.2016
comment
Конечно! Глядя на ваш код, всего 4 цикла. Два внешних цикла проходят от num1 до 0, то есть num1 раз для каждого цикла, затем два внутренних цикла идут от num2 до 0, то есть num2 раза для каждого цикла, таким образом, он повторяется через num1*num1 + num2*num2 раз, то есть (a^2 + b^2), что не является желаемым результатом! - person cullan; 12.11.2016