二分查找-循环和递归版本,倍增求快速幂,以及常用算法库和string库

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
//算法库
/*binary_search()二分搜索
sort()快排
min_element()查找最小值
max_element()查找最大值
reverse()反转*/

//string库
/*to_string() 数值转string
stod() stoi() 等等 string转数值
substr()*/


//时间复杂度:O(logn)
int binarySearch(vector<int>& vec, int target) {//二分查找循环版本
	int l = 0, r = vec.size() - 1;
	while (l <= r) {
		int mid = (l + r) / 2;
		if (vec[mid] == target) {
			return mid;
		}
		else if (vec[mid] < target) {
			l = mid + 1;
		}
		else r = mid - 1;
	}
	return -1;
}

int binarySearch1(vector<int>& vec, int l, int r, int target) {//二分查找递归版本
	if (l > r) return -1;
	int mid = (l + r) / 2;
	if (vec[mid] == target) return mid;
	else if (vec[mid] > target) return binarySearch1(vec, l, mid - 1, target);
	else return binarySearch1(vec, mid + 1, r, target);
}


//倍增法求快速幂
typedef long long ll;
ll Quick_pow(int base, int m) {
	//相当于树反过来,时间复杂度也是树的高度O(logn),在这里是O(logm)
	ll rlt=1;
	while (m) {
		if ((m & 1) == 1) rlt *= base;//或者if(m % 2 == 1)
		base = base * base;
		m >>= 1;
	}
	return rlt;
}
int main() {

	//vector<int> vec{ 1,2,3,4,5 };
	//int tar;
	//while (cin >> tar) {
	//	cout << binarySearch(vec, tar) << endl;
	//	cout << binarySearch1(vec, 0,vec.size()-1, tar) << endl;
	//}

	int base, m;
	while (cin >> base >> m) {
		cout << Quick_pow(base, m) << endl;
	}

	return 0;
	system("pause");
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值