迭代版本

int fast_pow(int a ,int b){
	//迭代版本
	long long ans = 1;
	while(b){
		//鸡数
		if(b%2){
			ans = ans%1000 * (a%1000);//拿出一个底数
		}
		a = (a * a)%1000;//底数的平方
		b = b / 2;
	}
	return ans%1000;
}

递归版本

//递归版本
int fast_pow2(long long a ,long long b){
	if(b==0) return 1;
	long long half = fast_pow2(a,b/2);
	if(b%2){
		return half%1000 * (half%1000) * (a%1000);
	}else{
		return half%1000 * (half%1000);
	}
}

乘法

#include <iostream>
using namespace std;

const long long LIMIT = 1000000000;

int main() {
  long long a, b;
  cin >> a >> b;

  if (a == 1) {
    cout << 1 << endl;
    return 0;
  }

  long long res = 1;
  long long base = a;

  while (b) {
    if (b & 1) {
      if (res > LIMIT / base) {
        cout << -1 << endl;
        return 0;
      }
      res = res * base;
    }
    b >>= 1;
    if (b) {
      base = base * base;
    }
  }

  cout << res << endl;
  return 0;
}

0 条评论

目前还没有评论...