|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
int main()
{
double x,y,z;
double power(double a , double b);
scanf("%lf,%lf",&x,&y);
z=power(x,y);
printf("%lf",z);
}
double power(double a , double b)
{
double z1,c,i,n,z,m,n1,r,re,re1,v,p,w,h,temp;
if(b==0)
{
z = 1;
return z;
}
else if(b==1)
{
z = a;
return z ;
}
else if(b>0&&((int)(b*10))%10==0)
{
temp = a;
for(i=1;i<b;i++)
{
a = a *temp;
}
z = a;
return z ;
}
else if(b>0&&((int)(b*10))%10!=0)
{
n=0;
c= b -(int)b;
m = c;
for(i=1;i<1000;i++)
{
m= m *10;
n++;
if(((int)(m*10))%10==0)
{
break;
}
}
n1 = 10;
for(i=1;i<n;i++)
{
n1=n1 *10 ;
}
temp = a ;
r = a;
for(h=1;h<c*n1;h++)
{
r = r*temp;
}
for(v=1;v<1000;)
{
p = v ;
temp = v;
for(w=1;w<n1;w++)
{ p = p*temp ;
}
if(p >r)
{
re = v;
v=100000.0;
break;
}
v = v +0.00001;
}
re1 =a;
temp = a;
for(i=1;i<(int)b;i=i+1)
{
re1 = re1 * temp;
}
if(b<1&&b>0)
{
z = re ;
return z ;
}
else if(b>1)
{
z= re * re1;
return z ;
}
}
}
为什么我输入0和1之间的数值都正确,只要输入大於1的小数,有些数就发生问题,我研究很久,有大老可以解释吗
- #include <stdio.h>
- double pow(double, int);
- int main() {
- printf("%.2lf\n", pow(5, 3));
- printf("%.2lf\n", pow(1.25, 3));
- printf("%.2lf\n", pow(0.67, -7));
- return 0;
- }
- double pow(double base, int exponent) {
- if (!exponent) {
- return 1;
- }
- else if (exponent > 0) {
- return base * pow(base, exponent - 1);
- }
- return 1. / pow(base, -exponent);
- }
复制代码
|
|