关于pow在printf函数中的"多面人"
在“跳台阶”这道题中需要用到POW函数,并输出,结果我自测时发现了一个小问题。
如果是
int k = pow(2,n-1);
printf ( "%d\n", k );
输入n=4
输出8(正确)
如果改为
printf ( "%d\n", pow(2,n-1) );
输入n=4
输出0(错误)
再测试多组数据,发现当数据较小时输出值都为0,这是为什么呢?
然后我又再修改了一下,进行了强制类型转换
printf ( "%d\n", (int)(pow(2,n-1)) );
输入n=4
输出8
再修改下
printf ( "%f\n", pow(2,n-1) );
输入n=4
输出8.000000
是不是心里已经有答案了?可以先思考下,下面揭晓
是的,pow函数返回的是double型变量,用%d即用int型输出,根据double的储存原理和int的储存原理差距,导致前几个数对应的int都为0。