c语言 2进制到十进制转换 找错

来源:百度知道 编辑:UC知道 时间:2024/06/02 04:39:03
#include<stdio.h>
#include<math.h>

int main(void) {

int i=31;

int count=0;

int stick=0;

int sim=0;

char ram[32];

printf("Enter number in binary format: ");

scanf("%s", ram);

while(i>=0&&i<32) {

if((ram[i]==0 || ram[i]==1)&&sim!=i){

sim=i;

i=i-1;

}

}

while(sim>=0 && sim<=31) {

stick=stick+(ram[sim])*(pow(2,count));

sim=sim-1;

count=count+1;
}

printf("%d", stick);

return 0;

}

另外,这是不带小数点的算法,要是把小数点后面的数也考虑进去怎么做呢?

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

int main(void) {

int i = 0;

int count;

double stick=0;

int sim=0;

char ram[32],*p;

printf("Enter number in binary format: ");

scanf("%s", ram);

sim = strlen(ram);

for(p = ram + sim - 1; (*p)&&*p != '.'; p--,i++);

count = -1*(i);
for(;sim>0;sim--)
{
if(ram[sim-1] != '.')
stick += (ram[sim - 1] - '0') * pow (2, count++);
}

printf("%lf\n", stick);

return 0;

}

当进入第一个while循环的时候,i为1,如果你输入的数没有32位,或者32位不是0或者1,就是死循环了

我大概看了一下,你这个写反了,比如输的是1010,照你这么写,即使能运行,计算的却是0101

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

int main(void)
{
int stick=0;
int i=0;
long int ram;
p