直接用C语言实现,没有数据结构
需要看栈和队列版的看这里
代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/**
* 整数部分十进制转二进制
*/
void convertIntegerToBinary(long n)
{
long b,k,i;
long remainder[30];
k=0;
while(n != 0){
b = n / 2;
k++;
remainder[k]= n - b * 2;
n = n / 2;
};
for (i = k; i >= 1; i--){
printf("%d",remainder[i]);
}
}
/**
* 小数部分十进制转二进制
*/
void convertDecimalToBinary(double n)
{
int i=0;
if (n == 0) {
return;
}
printf(".");
for(i=0; i<18; i++)
{
if(n*2>1)
{
n=n*2-1;
printf("1");
}
else
{
n=n*2;
printf("0");
}
}
printf("\n\n");
}
/**
* 十进制转二进制
*/
void digitalToBinary(double input) {
long integer = input / 1;
double decimal = input - (double)integer;
convertIntegerToBinary(integer);
convertDecimalToBinary(decimal);
}
/**
* 二进制转十进制
*/
void binaryToDigital(char binary[]) {
char ch;
long long integer = 0;
double decimal = 0.0;
int i = 0, integerNum = 0, decimalNum = -1;
bool hasDecimal = false;
// 计算整数和小数所占位数
for (; i < 30; ++i) {
ch = binary[i];
if (ch == 0) {
break;
}
if (!hasDecimal && ch != '.') {
++integerNum;
} else {
hasDecimal = true;
++decimalNum;
}
}
// 计算整数部分
i = integerNum;
for (; i > 0 ; --i) {
if (binary[i - 1] == '1') {
integer += pow(2, integerNum - i);
}
}
// 计算小数部分
if (hasDecimal) {
i = integerNum + 1;
for (; i <= integerNum + decimalNum; ++i) {
if (binary[i] == '1') {
decimal += (double)pow(2, integerNum - i);
}
}
printf("%lf", (double)integer + decimal);
} else {
printf("%lld ", integer);
}
printf("\n\n");
}
int main() {
double digital;
char binary[30];
int n;
while(1)
{
printf("\n1:十进制转换二进制,2:二进制转换十进制,3:退出\n");
scanf("%d",&n);
// getchar();
switch(n)
{
case 1:
printf("请输入待转的十进制数:\n");
scanf("%lf", &digital);
printf("转换为二进制值为:\n");
digitalToBinary(digital);
break;
case 2:
printf("请输入待转的二进制数:\n");
scanf("%s", binary);
printf("转换为十进制值为:\n");
binaryToDigital(binary);
break;
case 3:
printf("您已退出\n");
exit(0);
default:
printf("error\n");
}
}
}