我在下面的代码中没有得到我所期望的结果。

问题描述 投票:-1回答:1
#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
1个回答
2
投票

一般来说,在可以只使用整数进行计算的情况下,使用浮点数并不是一个好主意,因为浮点数计算可能会包含错误。(更多信息,请参见 语言不可知 - 浮点数学坏了吗?- 栈式溢出)

在这种情况下,你可以改变加法的计算顺序,而不改变它们的结果,所以部分

    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;
    }
热门问题
推荐问题
最新问题