📄 bin2dec.c
字号:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef struct{
char a;
struct Node *next;//链表指针
}Node, *Link;//定义链表结构
int main()
{
Link h, head, end;//定义链表指针
double dec=0;
int i=-1;//用于转化成十进制的次数
short flag=1, flag2=0;
//形成链表
h=head=(Link)malloc(sizeof(Node));
if(!h){//若内存分配不成功,则退出
printf("Not Enough Memory!\n");
return 1;
}
head->next=NULL;//初始化指针
//用户输入二进制数字
while ( ( head->a = getchar() ) != '\n'){//按回车结束输入
if(head->a < '0' || head->a > '1'){//输入合法性检查
if(i==-1 && head->a=='-'){
flag=-1;//负数
continue;
}
else if(!flag2 && head->a=='.')//小数
flag2=1;
else{
i=-1;
break;
}
}
end=(Link)malloc(sizeof(Node));
if(!end){//若内存分配不成功,则退出
printf("Not Enough Memory!\n");
return 1;
}
head->next=end;//连接两块内存空间
head=end;
head->next=NULL;
if(!flag2)
i++;
}
if(i==-1){//如果输入的不是二进制数字,则退出
printf("Invalid!\n");
return 1;
}
//进行转换
head=h;
if(flag2){//整数转换
while(head->a != '.'){
head->a -= 48;
dec = dec + head->a * pow(2, i);
head=head->next;
i--;
}
i=-1;
head=head->next;
}
while(head->a != '\n'){//小数转换
head->a -= 48;
dec = dec + head->a * pow(2, i);
head=head->next;
i--;
}
printf("%g\n", dec*flag);//输出结果
//释放内存
head=h;
while(h){
h=h->next;
free(head);
head=h;
}
return 0;//无误退出
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -