以求153是否为水仙花数为例简述pow函数的使用问题;
/*计算153是否为水仙花数*/
int i,x,y,z,a,b,c;
i=153;
x=i/100;
y=i/10%10;
z=i%10;
/*a=pow(x,3);
b=pow(y,3);
c=pow(z,3);*/
if(i==pow(x,3)+pow(y,3)+pow(z,3))
{
printf("计算得:%d 是水仙花数",(pow(x,3)+pow(y,3)+pow(z,3)));
}
else
printf("不是水仙花数。");
运算结果为:
出现错误,这是因为pow函数的标准形式为pow(double x,double y),数据类型都是双精度型。而我们定义的i为整形,类型不对所以出现错误。而且pow是一个有返回值的函数,应该有相应的变量接收返回值,以下为代码修改方式之一:
int i,x,y,z,a,b,c;
i=153;
x=i/100;
y=i/10%10;
z=i%10;
a=pow(x,3);
b=pow(y,3);
c=pow(z,3);
if(i==a+b+c)
{
printf("计算得:%d 是水仙花数",a+b+c);
}
else
printf("不是水仙花数。");
运行结果为:
另一种修改方式是运用强制类型转换,将double类型转换为int类型。代码修改:
int i,x,y,z,a,b,c;
i=153;
x=i/100;
y=i/10%10;
z=i%10;
/*a=pow(x,3);
b=pow(y,3);
c=pow(z,3);*/
if(i==(int)pow(x,3)+pow(y,3)+pow(z,3))
{
printf("计算得:%d 是水仙花数",(int)(pow(x,3)+pow(y,3)+pow(z,3)));
}
else
printf("不是水仙花数。");
运行结果: