进制之间的转换想必大家都十分熟悉了,这次我们用代码将它实现
十进制转二进制:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#pragma warning(disable:4996) //在vs2010及以上版本,若使用了scanf函数,便会报错,此处使用预编译命令pragma 忽略编译器对此```
int main()
{
int a ,x;
int i = 0,j = 0,k = 0;
double b,y;
char array[20] = ""; //定义一个char 类型的数组,将scanf 的输入入栈
int str1[20],str2[20],str3[20];
int arr[20];
char dest_str[20];
char c = '.';
scanf("%s", &array);
//strchr()函数若未找到字符串c,便返回NULL;此处我们用来判断输入的数是整数还是浮点数
if(strchr(array, c) == NULL) //输入的是整数
{
sscanf(array,"%d",&a);//将字符串转换为整型数据a
while(a/2 != 0) //最小乘法次数
{
str1[i++] = a%2;
a = a/2;
}
str1[i] = 1;
printf("输入数据的二进制表示为:");
for(k = i;k>=0;k--)//存放的二进制数为倒序,输出需正序输出
{
printf("%d",str1[k]);
} printf("\n");
}
else
{
sscanf(array,"%lf",&b);
x= (int)b;
y = b-(int)b;
i = 0;
while(x/2 != 0)
{
str2[i++] = x%2;
x =x/2;
}
str2[i] = 1;
while((y*2 -(int)y*2)!= 0)
{
str3[j++] = int(y*2);
y = y*2 -(int)y*2;
}
printf("输入数据的二进制表示为:");
for(k = i;k>=0;k--)
{
printf("%d",str2[i]);
}
printf(".");
for(int k = 0;k<j;k++)
{
printf("%d",str3[k]);
}
printf("\n");
}
return 0;
}
//在vs2010编译通过;
十进制转二进制的代码便如上,十进制与其他进制的转换也大同小异在此便不在赘述;
这段代码还有很多不足的地方,如转换后的二进制数以数组元素的形式存储且单个打印,预想中的实现方式为将其转化为一个整形或浮点型数或者字符串来实现;但使用strncpy函数显然不可行,正在进一步的探索中…