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<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