C语言问题:输入一个二进制数,输出其对应的十进制数。(包括正数、负数、小数)

【注意】不能用到数组的知识。谢谢!
因为我才学到循环语句,所以别用太复杂的语句。
最新回答
空自忆

2025-06-27 13:31:30

11(
二进制
)=3 (十进制) 对了要加分
绝望透心凉

2025-06-27 01:56:16

下面这个算法不用数组,是直接从键盘输入的。输入一串01字符串,开头可以有负号,中间也可以有小数点,遇到其他字符(包括空格、回车等等)就算结束。
该算法的结果是double型。
然后你在主程序中用printf("%lf",bi_input());就可以按十进制输出了。

double bi_input()
{
double x=0.0,y=1.0;
int f=1,flag=0;
while(1)
{
switch(flag)
{ case 0: switch(getchar()) /* flag==0:第一个字符,可以是负号或小数点,也可以是0或1 */
{ case '1': flag=1;x=1; break;
case '0': flag=1; break;
case '-': flag=1;f=-1; break;
case '.': flag=2; break;
default: return(x*f);/* 遇非法字符(包括回车)结束输入 */
}
break;
case 1: switch(getchar()) /* flag==1:整数部分,可以是0或1,也可以是小数点 */
{ case '1': x=x*2+1;break;
case '0': x=x*2;break;
case '.': flag=2; break;
default: return(x*f);/* 遇非法字符(包括回车)结束输入 */
}
break;
case 2: y=y/2; /* flag==2:小数部分,可以是0或1 */
switch(getchar())
{ case '1': x+=y;break;
case '0': break;
default: return(x*f);/* 遇非法字符(包括回车)结束输入 */
}
}
}
}
【说明】
上述算法中各变量说明:
x是已经输入部分的绝对值,f是正负号。y是当前小数位的单位值。
flag是状态标志:0——处理首字符;1——处理整数部分;2——处理小数部分。