1.怎么将二进制转换为十进制,重点是小数部分怎么转换
2.怎么将二进制转变为八进制或者是十六进制,包含小数部分
https://blog.csdn.net/djzhao627/article/details/103651761
int main(int argc,char* argv[])
{
int menu;
int k;
float temp;
float f;
LinkQueue *l;
LinkStack *s = NULL;
char chs[100];
char chs1[100];
char chs2[100];
DataType e;
float num;
int tt=0;/*输出栈元素时使用*/
printf(" 进制转换 \n");
while(TRUE)
{
l = LQueueCreateEmpty();
s = (LinkStack *)malloc(sizeof(LinkStack));
s->data=1;
s->next=NULL;
printf("*****************************************\n");
printf("** 1、10-2进制小数转换 **\n");
printf("** 2、2-10进制小数转换 **\n");
printf("** 3、退出 **\n");
printf("*****************************************\n");
scanf("%d",&menu);
switch(menu)
{
case 1:
getchar();
printf("请输入需要转换的数字:\n");
scanf("%f",&temp);
if(temp > 1.0 && temp != (int)temp)
{/* 如果输入的不是一个整数并且大于1 */
s = IntConverDToB((int)temp,s);
DecConverDToB(temp - (int)temp,l);
printf("转化后的二进制小数为:",temp);
while(!LStackIsEmpty(s))
{
printf("%d",LStackGetTop(s)); /* 输出整数部分 */
s=LStackPop(s,&tt);
}
printf(".",temp);
while(!LQueueIsEmpty(l)) /* 输出小数部分 */
{
LQueueDeQueue(l,&e);
printf("%d",e);
}
printf("\n");
}
else
{
if(temp == (int)temp) /* 如果输入的是一个整数 */
{
printf("%d转化后的二进制小数为:",(int)temp);
s = IntConverDToB((int)temp,s);
while(!LStackIsEmpty(s)) /* 输出整数部分 */
{
printf("%d",LStackGetTop(s));
s=LStackPop(s,&tt);
}
printf(".0\n");
}
else /* 如果输入的是一个小于1的小数 */
{
printf("----------\n");
printf("转化后的二进制小数为:",temp);
DecConverDToB(temp,l);
printf("0.",temp);
while(!LQueueIsEmpty(l)) /* 输出小数部分 */
{
LQueueDeQueue(l,&e);
printf("%d",e);
}
printf("\n");
getchar();
}
}
break;
case 2:
getchar();
printf("请输入需要转换的二进制数字:\n");
gets(chs);
k = StringSplit(chs,chs1,chs2);
if(k != -1)
{
num = IntConverBToD(chs1,s);
f = DecConverBToD(chs2,l);
if(-1 != num && f != -1)
printf("转化后的十进制形式为:%f\n",(float)num + f);
else
printf("输入格式错误\n");
}
else
{
num = IntConverBToD(chs,s);
if(-1 != num)
printf("转化后的十进制形式为:%f\n",(float)num);
else
printf("输入格式错误\n");
}
break;
case 3: /* 退出 */
return 0;
default: /* 输入不满足要求,提示输入错误 */
printf("输入错误,请重新输入!\n");
continue;
}
}
return 0;
}
main()
{
char a,b;
float sum = 0, flag = 0, i = -1;
printf("Please input the binary string:");
while((a = getchar()) != '#')
{
if(a != '.')
{
sum = sum * 2 + a - '0';
}
if(a == '.')
{
flag = 1;
break;
}
}
while(flag == 1 && (b = getchar()) != '#')
{
sum += pow(2, i) * (b - '0');
i--;
}
if(flag == 1)
printf("The result is:%f\n", sum);
else
printf("The result is:%d\n", (int)sum);
}
#include <stdio.h>
#include <math.h>
main()
{
char a[100];
int i, j, n;
double sum= 0;
printf("Please input the binary string:");
gets(a);
for(n= 0; a[n]!= '#'; n++) /*确定字符序列长度*/
;
for(i= 0; a[i]!= '.' && i< n; i++) /*确定小数点的位置*/
;
for(j=0; j< i; j++)
sum= sum* 2 + (a[j]- '0');
for(j=5; j< n; j++)
sum= sum+ (a[j]- '0') * pow(2,i - j);
if(i!= n)
printf("The result is: %f", sum);
else
printf("The result is: %d", (int)sum );
return 0;
}