首页 > 代码库 > 数学函数

数学函数

数学函数,拿你该怎么办
先看一下能在编程中用到数学函数的情况
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=http://www.mamicode.com/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
先看一下我的代码
<span style="font-size:14px;">#include<stdio.h>
#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;">//注意b是整形,所以要进行强制转换</span>
                        {
                                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;
}</span>
这个题要会灵活运用数学函数,在此题中就出现了一个pow()———幂函数,其实此题还可以进一步简化,要用到abs()——绝对值函数,但是能力有限,用的不对,所以,才这么麻烦。。。。。。,哎,还需要努力呀!

数学函数