将基于n的数字转换为十进制但不起作用

时间:2014-09-26 06:04:38

标签: c pow

我尝试将基于数字的数字转换为带有C的十进制数。我有以下代码:

scanf("%d", &n);
scanf("%d %d %d %d", &n1, &n2, &n3, &n4);

dec = ( n1*pow(n,3) + n2*pow(n,2) + n3*pow(n,1) + n4*pow(n,0) );

它工作正常,直到我输入n = 10& n1 n2 n3 n4 = 0 2 5 4.

结果应为254,但终端显示为253.事实证明,从200-999开始,dec减少了1.但是当我输入1000时,dec=1000。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您很可能已将dec声明为int,而函数pow则返回double值。这里double被转换为int a被舍入。

更改为

double dec = ( n1*pow(n,3) + n2*pow(n,2) + n3*pow(n,1) + n4*pow(n,0) );
printf("%f",dec);

,输出将是

254.000000

答案 1 :(得分:1)

虽然您提供的代码在某些实现上运行良好,例如here,但您最好不要使用pow函数,因为您使用整数和非负数作为幂,并定义您的拥有intpow功能。一个天真的实现将是:

int intpow(int n, unsigned int power)
{
    int result = 1;
    while (power)
    {
        result *= n;
        power--;
    }
    return result;
}

可能是整数总和,即双精度之和,结果小于您期望看到的数字,比如0.000013,其中小数点后面的数字是被转换为被分配给int dec时被丢弃。

您可以通过将double的类型更改为dec并使用格式说明符double进行打印来检查"%f"结果。如果是这样的话,我的建议将是一个合适的解决方案。

你也可以尝试考虑更好的基本转换方式,因为有一种方法根本不需要(int)pow