[白駿1629]乗算


AにBを乗じた数
これはabに聞く質問です.Math.pow()で解くことができますが、正解ではありません.
サイズが2147483647の各変数があればintの最値となるため、値の範囲を超えているだけでなく、演算量がn程度であるため、問題は解決できない.したがって、この値のタイプは長く変化し、実行時間n回よりも速い方法を追求する.선형방식의 제곱
// loop 방식
public static int Loop_pow(int a, int n) {
      int res = 1;
      for (int i = 1; i <= n; i++) {
          res *= a;
      }
      return res;
  }
 
 // 재귀 방식.
 public static int Recursion_pow(int a, int n) {
      if (n == 0)
          return 1;
      return a * Recursion_pow(a, n - 1);
  }
反復二乗アルゴリズム->分割征服アルゴリズム
a 7=a6⋅a
a 6=a3 a3
a3 = a2 a
a2 = a1 * a1
a1 = a0 =1
再帰アルゴリズムを用いて,問題をゼロに分割し,答えをゼロに連続的に貼り付けた.
  • <注意>奇数の場合、この分割にaを乗じる数処理
  • .
     public static int log_pow(int a, int n) {
            if (n == 0)
                return 1;
            else if (n % 2 == 0) {
                int k = log_pow(a, n / 2);
                return k * k;
            } else {
                int k = log_pow(a, (n - 1) / 2);
                return a * k * k;
            }
        }