首页 > 解决方案 > 我没有从下面的代码中得到我期望的结果

问题描述

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int sizze(int n) //gives size of binary number 0f decimal number n.
{
    int count=0;
    while(n>1)
    {
        n=n/2;
        count++;
    }
    count =count +1;
    return count;
};
int bin(int n) //gives binary number.
{
    int l=0;
    int y[sizze(n)];
    int t=sizze(n);
    for(int i=0; i<t; i++)
    {
        y[i]=n%2;
        n=n/2;
    }
    for(int i=t-1; i>=0; i--)
    {
        l=l+y[i]*pow(10,i);
    }
    return l;
}

int main()
{
    printf("%d",bin(5));
    return 0;
}

上面的代码是打印给定数字的二进制数,但是有一些错误。

我期待它打印 101,但它正在打印 100。有一些错误,l=l+y[i]*pow(10,i);但我不明白它有什么问题。

谁能帮我找出错误。

标签: c

解决方案


通常,使用浮点数而仅使用整数进行计算并不是一个好主意,因为浮点数计算可能包含错误。
(有关更多信息,请参阅语言不可知论 - 浮点数学是否损坏? - 堆栈内存溢出

在这种情况下,您可以更改加法的计算顺序而不更改它们的结果,因此该部分

    for(int i=t-1; i>=0; i--)
    {
        l=l+y[i]*pow(10,i);
    }

可以写成

    for(int i=0,delta=1; i<t; i++)
    {
        l=l+y[i]*delta;
        delta=delta*10;
    }

推荐阅读