/*1)任务描述
将输入的0和1数字序列表示的二进制数转换为八进制、十六进制数。
(2)功能要求
①将输入的0和1数字序列存放到数组中。
②从终端输入要转换的进制。
③将转换后的结果保存到数组中,并以适当的形式输出。
④若要转换成任意进制数,程序应如何编写?
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct {
char a[100]; //用结构体定义一个字符数组
int top;
}Stack;
int power(int num, int n) { //把二进制的数转化为十进制的数
int i, cheng = num;
if (n == 0) {
return 1;
}
for (i = 0; i < n-1; i++) {
num = num * cheng;
}
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')* power(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");
}
int main()
{
char bin[16]; //定义一个字符串数组
int dec, jinzhi;
printf("输入一个二进制数:\n");
gets(bin); //用gets()来接收字符串
dec = bin2dec(bin);
printf("十进制:%d", dec);
printf("\n输入要转换的进制: "); //将二进制的数转换成任意进制
scanf("%d", &jinzhi);
if(jinzhi==8)
printf("八进制数为:0",jinzhi);
if(jinzhi==16)
printf("十六进制数为:0x", jinzhi);
dec2eve(dec, jinzhi);
}
进制转换
最新推荐文章于 2024-07-29 22:37:18 发布