我创建了二进制到十进制转换器,但即使用二进制编写的小数字也有很多位数,因此太大而无法在16位机器上由整数变量保持。有没有办法解决。程序在C中。这是代码,谢谢:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
clrscr();
int a,b,d=0,x=1;
int check(int y);
printf("Enter your number in Binary:");
scanf("%d",&a);
if(check(a)==0)
{
printf("Number tolerable. Conversion Process Initiated.");
}
else
{
printf("Number not binary. Try again.");
exit(1);
}
while(a!=0)
{
if(a%10==1)
{
d=d+x;
}
a=a/10;
x=x*2;
}
printf("\nDecimal:%d",d);
getch();
}
int check(int y)
{
while(y!=0)
{
if(y%10!=0&&y%10!=1)
{
return 1;
}
else
{
y=y/10;
}
}
return 0;
}
答案 0 :(得分:2)
一种简单的方法是将二进制数存储到字符数组中。要将其转换为数字,请参阅以下步骤 -
1.从i=n-1
开始到i>=0
(大小为n
的数组)。
2.检查索引i
处的字符是0
还是1
。
按以下方式识别0
和1
-
3.如果0
,则数字为0
。
4.如果1
,则数字将等于2^i
(i
为索引)。
5.最后一步是添加它们。
否则使用integer array
。
答案 1 :(得分:0)
%d
scanf
格式说明符要求以十进制格式输入数字。没有二进制格式说明符,因此您必须将数字作为字符串读入并通过它进行解析。
例如,如果用户输入&#34; 101011&#34;,您需要将其识别为2 ^ 5 + 2 ^ 3 + 2 ^ 1 + 2 ^ 0并将这些值添加到结果数字(到要清楚,我使用^表示取幂而不是按位xor)。
答案 2 :(得分:0)
没有必要存储二进制数字。
#include <string.h>
int n=0,c;
printf("Enter your number in Binary:");
while(strchr("01",c=getch()))
n+=n+c-'0';