0
for(i = 0; bitstr[i] != '\0'; i++){
    if(!(bitstr[i]=='0' || bitstr[i]=='1')){
        printf("Not a valid bitstring!");
        exit(0);
    }
    else{
        sum = sum*2+bitstr[i];
    }
}
printf("%d", sum);

例如,当我输入 101 时,它会打印 339,而它应该打印 5 作为答案。我不确定我做错了什么。任何帮助将非常感激。

4

2 回答 2

5

这是因为'1'and'0'是字符'1''0',而不是整数值。您需要'0'从它们中减去以获得数值:

sum = sum*2+(bitstr[i]-'0');
于 2013-09-15T01:33:18.430 回答
0

@dasblinkenlight 提供的解决方案是正确的,因为需要'0'在循环中减去 a。

强烈怀疑另一个问题

输入的“101”没有详细说明哪些数字与“101”最重要,反之亦然。它也没有显示如何 bitstr[]输入。

通常的假设是最左边的数字是最重要的,并且首先输入的数据是最重要的数字。因此,还需要更改索引。

char bitstr[100];
int sum = 0;
scanf("%s", bitstr);
size_t i,l;
l = strlen(bitstr); // add
for(i = 0; bitstr[i] != '\0'; i++){
    if(!(bitstr[l-1-i]=='0' || bitstr[l-1-i]=='1')){
        printf("Not a valid bitstring!");
        exit(0);
    }
    else{
        sum = sum*2+ (bitstr[l-1-i] - '0'); // change index and subtract '0'
    }
}
printf("%d", sum);

建议重新排序for()循环 from strlen(bitstr) - 1to0并简化索引计算。保留“原样”以匹配 OP。

于 2013-09-15T02:28:19.467 回答