2018_蓝桥_pow()函数_次幂函数总结

c语言中pow()函数的用法和注意:

    头文件:#include <math.h>

pow() 函数用来求 x 的 y 次幂(次方),其原型为:
    double pow(double x, double y);

pow()用来计算以x 为底的 y 次方值,然后将结果返回。设返回值为 ret,则 ret = xy。

可能导致错误的情况:
如果底数 x 为负数并且指数 y 不是整数,将会导致 domain error 错误。
如果底数 x 和指数 y 都是 0,可能会导致 domain error 错误,也可能没有;这跟库的实现有关。
如果底数 x 是 0,指数 y 是负数,可能会导致 domain error 或 pole error 错误,也可能没有;这跟库的实现有关。
如果返回值 ret 太大或者太小,将会导致 range error 错误。

错误代码:
如果发生 domain error 错误,那么全局变量 errno 将被设置为  EDOM;
如果发生 pole error 或 range error 错误,那么全局变量 errno 将被设置为 ERANGE。

写算法提高快速幂题目,突发奇想地想用pow()函数了。真是太天真了。pow函数返回的是double类型的,能表示的数的范围也就是15,6位。而快速幂那一题有些数据光输入的数就十几位了,根本没法保存!给了40分,着实的够意思了。

    下面是快速幂那一题:

.

  算法提高 快速幂  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  给定A, B, P,求(A^B) mod P。
输入格式
  输入共一行。
  第一行有三个数,N, M, P。
输出格式
  输出共一行,表示所求。
样例输入
2 5 3
样例输出
2
数据规模和约定
  共10组数据
  对100%的数据,A, B为long long范围内的非负整数,P为int内的非负整数。

.

快速幂函数

#include<iostream>
using namespace std;
int Pw(long long a,long long b,int c) {
	int ret = 1;
	a = a % c;
	while (b>0) {
		if (b%2==1) {//当b是奇数的时候
			ret = ret * a%c;
		}
		b /= 2;;
		a = a * a%c;
	}
	return ret;
}
int main() {
	long long int a, b;
	int c;
	cin >> a >> b >> c;
	cout << Pw(a, b, c) << endl;
	return 0;
}

快速幂相关博客: 点击打开链接

.

猜你喜欢

转载自blog.csdn.net/qq_39671636/article/details/79765853