数学函数,拿你该怎么办
先看一下能在编程中用到数学函数的情况
int abs(int i) 返回整型参数i的绝对值
double cabs(struct complex znum) 返回复数znum的绝对值
double fabs(double x) 返回双精度参数x的绝对值
long labs(long n) 返回长整型参数n的绝对值
double exp(double x) 返回指数函数e^x的值
double frexp(double value,int *eptr) 返回value=x*2^n中x的值(0.5<=x<1),n存贮在eptr中
double ldexp(double value,int exp); 返回value*2^exp的值
double log(double X) 返回logeX的值,以e为底的对数
double log10(double x) 返回log10x的值,以10为底的对数
double pow(double x,double y) 返回x^y的值
long double pow(long double,int)
float pow(float,int)
double pow(double,int)
double pow10(int p) 返回10^p的值
double sqrt(double x) 返回a,且a满足a*a=x,a>=0
double acos(double x) 返回x的反余弦cos^-1(x)值,x为弧度
double asin(double x) 返回x的反正弦sin^-1(x)值,x为弧度
double atan(double x) 返回x的反正切tan^-1(x)值,x为弧度
double atan2(double y,double x) 返回y/x的反正切tan^-1(x)值,y的x为弧度
double cos(double x) 返回x的余弦cos(x)值,x为弧度
double sin(double x) 返回x的正弦sin(x)值,x为弧度
double tan(double x) 返回x的正切tan(x)值,x为弧度
double cosh(double x) 返回x的双曲余弦cosh(x)值,x为弧度
double sinh(double x) 返回x的双曲正弦sinh(x)值,x为弧度
double tanh(double x) 返回x的双曲正切tanh(x)值,x为弧度
double hypot(double x,double y) 返回直角三角形斜边的长度(z),x和y为直角边的长度,z^2=x^2+y^2
double ceil(double x) 返回不小于x的最小整数
double floor(double x) 返回不大于x的最大整数
void srand(unsigned seed) 初始化随机数发生器
int rand() 产生一个随机数并返回这个数
double poly(double x,int n,double c[])从参数产生一个多项式
double modf(double value,double *iptr)将双精度数value分解成整数部分和小数部分,iptr为整数部分,返回小数部分
double fmod(double x,double y) 返回x/y的余数
double atof(char *nptr) 将字符串nptr转换成浮点数并返回这个浮点数
double atoi(char *nptr) 将字符串nptr转换成整数并返回这个整数
double atol(char *nptr) 将字符串nptr转换成长整数并返回这个整数
char *ecvt(double value,int ndigit,int *decpt,int *sign)将浮点数value转换成字符串并返回该字符串
char *fcvt(double value,int ndigit,int *decpt,int *sign)将浮点数value转换成字符串并返回该字符串
char *gcvt(double value,int ndigit,char *buf)将数value转换成字符串并存于buf中,并返回buf的指针
char *ultoa(unsigned long value,char *string,int radix)将无符号整型数value转换成字符串并返回该字符串,radix为转换时所用基数
char *ltoa(long value,char *string,int radix)将长整型数value转换成字符串并返回该字符串,radix为转换时所用基数
char *itoa(int value,char *string,int radix)将整数value转换成字符串存入string,radix为转换时所用基数
double atof(char *nptr) 将字符串nptr转换成双精度数,并返回这个数,错误返回0
int atoi(char *nptr) 将字符串nptr转换成整型数, 并返回这个数,错误返回0
long atol(char *nptr) 将字符串nptr转换成长整型数,并返回这个数,错误返回0
double strtod(char *str,char **endptr)将字符串str转换成双精度数,并返回这个数,
long strtol(char *str,char **endptr,int base)将字符串str转换成长整型数,并返回这个数,
int matherr(struct exception *e)用户修改数学错误返回信息函数
double _matherr(_mexcep why,char *fun,double *arg1p,
double *arg2p,double retval)用户修改数学错误返回信息函数
unsigned int _clear87() 清除浮点状态字并返回原来的浮点状态
void _fpreset()重新初使化浮点数学程序包
unsigned int _status87() 返回浮点状态字
下面举个例子
Root of the Problem
Description
Given positive integers B and N, find an integer A such that AN is as close as possible to B. (The result A is an approximation to the Nth root of B.) Note that AN may be less than, equal to, or greater than B.
Input: The input consists of one or more pairs of values for B and N. Each pair appears on a single line, delimited by a single space. A line specifying the value zero for both B and N marks the end of the input. The value of B will be in the range 1 to 1,000,000 (inclusive), and the value of N will be in the range 1 to 9 (inclusive).
Output: For each pair B and N in the input, output A as defined above on a line by itself.
Example Input: Example Output:
4 3
5 3
27 3
750 5
1000 5
2000 5
3000 5
1000000 5
0 0 1
2
3
4
4
4
5
16
先看一下我的代码
#include<math.h>
int main()
{
int b,n;
while(scanf("%d %d",&b,&n),b,n)
{
int i, temp1, temp2;
for(i=1;i<=b;i++)
{
if(int(pow((float)i,(int)n))==b)<span style="color:#33CC00;">
{
printf("%d\n",i);
break;
}
else if(pow((float)i,(int)n)<b&&pow((float)i+1,(int)n)>b)
{
temp1=pow((float)i,(int)n);
temp2=pow((float)i+1,(int)n);
if(temp1-b>0&&temp2-b>0)
{
if(temp1-b<temp2-b)
{
printf("%d\n", i);
break;
}
else
{
printf("%d\n", i+1);
break;
}
}
else if(b-temp1>0&&b-temp2>0)
{
if(b-temp1<b-temp2)
{
printf("%d\n", i);
break;
}
else
{
printf("%d\n", i+1);
break;
}
}
else if(b-temp1>0&&temp2-b>0)
{
if(b-temp1<temp2-b)
{
printf("%d\n", i);
break;
}
else
{
printf("%d\n", i+1);
break;
}
}
else if(temp1-b>0&&b-temp2>0)
{
if(temp1-b<b-temp2)
{
printf("%d\n", i);
break;
}
else
{
printf("%d\n", i+1);
break;
}
}
}
}
}
return 0;
}
这个题要会灵活运用数学函数,在此题中就出现了一个pow()———幂函数,其实此题还可以进一步简化,要用到abs()——绝对值函数,但是能力有限,用的不对,所以,才这么麻烦。。。。。。,哎,还需要努力呀!