(1)任务描述
将输入的0和1数字序列表示的二进制数转换为八进制、十六进制数。
(2)功能要求
①将输入的0和1数字序列存放到数组中。
②从终端输入要转换的进制。
③将转换后的结果保存到数组中,并以适当的形式输出。
④若要转换成任意进制数,程序应如何编写?
#include<stdio.h>
#include<stdlib.h>
int pow(int num, int n);
int bin2dec(char *binary);
typedef struct
{
char a[100];//把二进制的每一位数值导入到数组当中
int top;
}Stack;
int main()
{
char bin[16];
int dec, jinzhi;
printf("输入二进制数:");
scanf("%s", bin);
dec = bin2dec(bin);
printf("十进制为:%d", dec);
printf("\n输入要转换的进制: ");
scanf("%d", &jinzhi);
printf("%d进制为:",jinzhi);
dec2eve(dec, jinzhi);
return 0;
}
int pow(int num, int n)
{
int i, b = num;
if (n == 0)
{
return 1;
}
for (i = 0; i < n-1; i++)
{
num = num * b;
}
return num;
}
int bin2dec(char *binary)
{
int index = strlen(binary) - 1;
int i,n = 0;
int dec = 0;
for (i = index; i >= 0; i--)
{
dec += (binary[i] - '0')* pow(2, n);
n++;
}
return dec;
}
int dec2eve(int dec, int jinZhi)
{
Stack s;
int temp, index = 0, i;
s.top = 0;
while (dec)
{
temp = dec % jinZhi;
if (temp < 10)
{
s.a[s.top] = temp + '0';
index++;
s.top++;
}
else
{
s.a[s.top] = temp - 10 + 'A';
index++;
s.top++;
}
dec /= jinZhi;
}
for (i = 0; i < index; i++)
{
s.top--;
printf("%c", s.a[s.top]);
}
printf("\n");
}