c - 为什么我的 C 二进制到十进制程序没有返回正确的值?

标签 c return-value

对于较大作业的一部分,我正在编写一个将二进制数转换为十进制数的程序。我知道我这样做的方式有点奇怪,可能可以改进,但我喜欢现在的方式,而且它几乎可以工作。唯一的问题是,如果你输入 10 作为二进制数,它会返回 1,但它应该返回 2。我测试的所有其他数字都工作正常。这是代码的相关部分:

int countDigits (int num) {
    int digits = 0;
    while (num != 0) {
        num /=10;
        digits++;
    }
    return digits;
}

long int binToDec (int num) {
    int numDigits = countDigits(num);
    char temp[32];
    int numStore[32];
    long int sum = 0;
    snprintf(temp, 32, "%d", num);
    for (int i = 0; i < numDigits; i++) {
        numStore[i] = temp[i] - '0';
    }
    for (int i = 0; i < numDigits; i++) {
        if (numStore[i] == 1) {
            sum += pow(2, i);
        }
    }
    printf("%ld\n", sum);
    return sum;

}

int main(void) {
    binToDec(10);
    return 0;
}

我绝对不明白为什么它没有返回正确的值。起初我以为我以错误的顺序迭代,但除非我做得不正确,否则向下计数而不是向上计数会产生相同的输出。有人可以指出我的错误吗?

最佳答案

我喜欢毫无意义但有趣的十进制编码二进制(DCB)表示形式,但你对它的设计过度了。考虑使用 countDigits() 函数中的逻辑作为 binToDec() 的基础,您会得到更简单的结果,例如:

#include <stdio.h>
#include <math.h>

unsigned int binToDec(unsigned long number) {
    unsigned int sum = 0;

    for (unsigned int i = 0; number > 0; i++, number /= 10) {
        if (number % 2 != 0) {
            sum += pow(2, i);
        }
    }

    return sum;
}

int main(void) {

    printf("%u\n", binToDec(101010));

    return 0;
}

输出

> ./a.out
42
> dc
2 i
101010 p
42
>

如果输入 10,则输出为 2

关于c - 为什么我的 C 二进制到十进制程序没有返回正确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39667870/

相关文章:

U盘的扇区大小可以修改吗?

c# - 找到 RegEx 匹配然后提取

function - Common Lisp 函数没有返回值

c - 为什么返回一个负的errno? (例如返回-EIO)

javascript - 我什么时候应该在 jquery 函数中使用 return false?

c - 修改 char * const pstr = "abcd"时出现段错误;

c - 对 ubuntu 上的 c 数学库的 undefined reference

c - "buffer[gotten] = '\0';"在此代码中的作用是什么?

c - 指数运算的中缀到后缀转换

r - 使用base r函数如何检查向量中是否存在元素