发布时间:2024-01-14 22:07来源:www.sf1369.com作者:宇宇
C语言中的数学函数:pow 原型:在TC2.0中原型为extern float pow(float x, float y); ,而在VC6.0中原型为double pow( double x, double y );
头文件:math.h
功能:计算x的y次幂。
返回值:x应大于零,返回幂指数的结果。
返回类型:double型,int,float会给与警告!
举例1:(在VC6.0中运行通过)
#include <math.h>
#include <stdio.h>
int main(void)
{
double x = 2.0, y = 3.0;
printf(%lf raised to %lf is %lf\n, x, y, pow(x, y));
return 0;
}
#include stdio.h
#include math.h
void main()
{
printf(%.5f\n, pow(3.5, 0.25)); //计算3.5的0.25次方,保留小数点后5位
}
#include<stdio.h>
#include<math.h>
void main()
{
printf(%lf\n, pow(3.5, 0.25) );
}
如上所示。
#include stdio.h
#include math.h
int main()
{
float a,b;
printf(请输入整数:);
scanf(%f,&a);
printf(请输入幂:);
scanf(%f,&b);
printf(结果:%g\n,pow(a,b));
}
int pow (int a, int b)
{
int k,p=1;
for (k=1;k<=b;k++);
{
p*=a;
}
return p;
}
这个函数都没抄返回值的,我帮你2113加了
if(p = pow(a,b))
{
printf(%d^%d=%d,a,b,p);
}
你调用pow(a,b)的时候要有5261变量来接收才行,还有你printf的时候为4102什么用&p?概念完全不清晰1653
同意楼上的 ->f的值小于10的-8次??? 明显太扯了
并且x的值稍微大一点 double的精度就都爆掉 除非你用高精度去存 假设你不考虑高精度 那这种运算明显应该用位运算来写比较合理
参考下面代码
#include<stdio.h>
#include <iostream>
using namespace std;
int modexp(long long a,long long b,long long n)
{
int ret=1;
long long tmp=a;
while(b)
{
//基数存在
if(b&0x1) ret=ret*tmp%n;
tmp=tmp*tmp%n;
b>>=1;
}
return ret;
}
int main()
{
int a,b,c;
scanf(%d%d%d,&a,&b,&c);
int ans=modexp(a,b,c);
cout<<ans<<endl;
}这个是 (a^n)mod b 的算法模板
long double _pow_i( long double _X, int _Y ) { if ( !_Y ) return 1; // 次幂为0的情况 if ( !(_Y-1) ) return _X; // 当_Y = 1的情况则返回结果_X return _X * _pow_i( _X, abs(_Y)-1 ); // 每一步返回 _X * 上一次的乘积,_Y 减1计数 } long double _pow( long double _X, int _Y ) { long double _Z = _pow_i( _X, _Y ); return _Y<0 ? 1 / _Z : _Z; } 因为写在一起的话不好解释,所以分开正负的情况,_pow就是判断次幂是否为负数,是负数就等于1/那个数个正次幂
C语言的^,不是幂运算符 ,而是按位异或运算符!准确的说,C语言没有幂运算符!你可以自己定义幂函数!