您的位置:首页 > 其它

进制转换中pow()函数的问题

2016-11-16 23:02 344 查看
今天遇到一个进制转换的问题,使用不同的编译器产生了不同的结果。代码很简单,m进制转换为k进制。

input 78 8

在VC 6.0里面运行

output 116

Code::Blocks里面运行

output 115

通过分析是在pow(10,i)上面除了问题,double转int,但不清楚原因,难道是int向上取整?向下取整?

断点分析,发现确实是pow()问题:

在VC 6.0中;

运行到第二轮 i=2, j=pow(10,i); j的值是100



Code::Blocks中;

运行到第二轮 i=2, j=pow(10,i); j的值是99



原因尚不明白,暂且记下。

#include<stdio.h>
#include<math.h>
/* m进制转换为k进制 */
void trans(int m,int k)
{
int n,j,i=1;
double d;
n=m%k;
while((m=m/k)!=0)
{
j=pow(10,i);
n+=(m%k)*j;
i++;
}
printf("%d ",n);
}

int main()
{
int b,n;
printf("please enter a number and a base:\n");
scanf("%d  %d",&n,&b);
trans(n,b);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数 编译器 vc