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。
第一行有三个数,N, M, P。
输出格式
输出共一行,表示所求。
样例输入
2 5 3
样例输出
2
数据规模和约定
共10组数据
对100%的数据,A, B为long long范围内的非负整数,P为int内的非负整数。
对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; }
快速幂相关博客: 点击打开链接
.