对于较大作业的一部分,我正在编写一个将二进制数转换为十进制数的程序。我知道我这样做的方式有点奇怪,可能可以改进,但我喜欢现在的方式,而且它几乎可以工作。唯一的问题是,如果你输入 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/