#include<malloc.h>
#include<stdio.h>
#include<process.h>
#include<stdlib.h>
#include<math.h>
#define length1 100
#define OK 1
typedef struct {
int *base;
int *top;
int length;
}sqlist;
int chp(sqlist &L){
L.base = (int *)malloc(length1 * sizeof(sqlist));
L.top = L.base;
if(!L.base) exit(-1);
L.length = length1;
return OK;
}
int add(sqlist &L, int e)
{
*(L.top) = e;
L.top++;
return OK;
}
int out(sqlist &L, int &e){
e = *(L.top - 1);
L.top--;
return OK;
}
void tentoeight(int n)
{
sqlist s;
int e;
chp(s);
while(n){
add(s, n % 8);
n = n / 8;
}
printf("转换为八进制数:");
while(s.base != s.top){
out(s, e);
printf("%d", e);
}
}
void tentotwo(int n)
{
sqlist s;
int e;
chp(s);
while(n){
add(s, n % 2);
n = n / 2;
}
printf("转换为二进制数:");
while(s.base != s.top){
out(s, e);
printf("%d", e);
}
}
void tentosixteen(int n)
{
sqlist s;
int e;
chp(s);
while(n){
add(s, n % 16);
n = n / 16;
}
printf("转换为十六进制数:");
while(s.base != s.top){
out(s, e);
if(e >= 10)
{
printf("%c", 'a' + e - 10);
}
else
printf("%d", e);
}
}
void twototen(int n)
{
sqlist s;
int e;
int i = 0;
int sum = 0;
chp(s);
while(n){
add(s, n % 10);
n = n / 10;
i++;
}
while(s.base != s.top){
out(s, e);
sum = sum + pow(2, i - 1) * e;
i--;
}
printf("转换为十进制数:");
printf("%d", sum);
}
void twotoeight(int n){
sqlist s;
int e;
int j = 0;
int a = 0;
int n1;
chp(s);;
while(n){
add(s, n % 10);
n = n / 10;
j++;
}
if(j % 3 != 0){
if(j < 3)
{
n1 = 3 - j;
while(n1){
add(s, 0);
n1--;
}
}
if(j > 3){
n1 = j % 3;
n1 = 3 - n1;
while(n1){
add(s, 0);
n1--;
}
}
}
while(s.base != s.top){
int sum = 0;
int i = 3;
while(i != 0){
out(s, e);
sum = sum + e * pow(2, i - 1);
i--;
}
a = a * 10 + sum;
}
printf("转化为八进制数:");
printf("%d",a);
}
void twotosixteen(int n){
sqlist s;
int e;
int j = 0;
int a = 0;
int n1;
chp(s);;
while(n){
add(s, n % 10);
n = n / 10;
j++;
}
if(j % 4 != 0){
if(j < 4)
{
n1 = 4 - j;
while(n1){
add(s, 0);
n1--;
}
}
if(j > 4){
n1 = j % 4;
n1 = 4 - n1;
while(n1){
add(s, 0);
n1--;
}
}
}
printf("转化为十六进制数:");
while(s.base != s.top){
int sum = 0;
int i = 4;
while(i != 0){
out(s, e);
sum = sum + e * pow(2, i - 1);
i--;
}
if(sum >= 10){
printf("%c", 'a' + sum - 10);
}
else{
printf("%d", sum);
}
}
}
void eighttoten(int n){
sqlist s;
int e;
int i = 0;
int sum = 0;
chp(s);
while(n){
add(s, n % 10);
n = n / 10;
i++;
}
while(s.base != s.top){
out(s, e);
sum = sum + pow(8, i - 1) * e;
i--;
}
printf("转换为十进制数:");
printf("%d", sum);
}
void eighttotwo(int n){
sqlist s;
int e;
chp(s);
while(n){
add(s, n % 10);
n = n / 10;
}
printf("转换为二进制数:");
while(s.base != s.top){
out(s, e);
if(e == 0) printf("000");
if(e == 1) printf("001");
if(e == 2) printf("010");
if(e == 3) printf("011");
if(e == 4) printf("100");
if(e == 5) printf("101");
if(e == 6) printf("110");
if(e == 7) printf("111");
}
}
void eighttosixteen(int n)
{
sqlist s;
int e;
int i = 0;
int sum = 0;
chp(s);
while(n){
add(s, n % 10);
n = n / 10;
i++;
}
while(s.base != s.top){
out(s, e);
sum = sum + pow(8, i - 1) * e;
i--;
}
tentosixteen(sum);
}
void sixteentoten(char a[100]){
int b[100];
int i = 0;
int j;
int sum = 0;
while(a[i] != '\0'){
if(a[i] >= '0' && a[i] <= '9')
b[i] = a[i] - '0';
else
b[i] = a[i] - '0' - 39;
i++;
}
for(j = 0; j < i; j++){
sum = sum + b[j] * pow(16, i - j - 1);
}
printf("转换为十进制数:");
printf("%d", sum);
}
void sixteentotwo(char a[100]){
int b[100];
int i = 0;
int j;
int sum = 0;
while(a[i] != '\0'){
if(a[i] >= '0' && a[i] <= '9')
b[i] = a[i] - '0';
else
b[i] = a[i] - '0' - 39;
i++;
}
for(j = 0; j < i; j++){
sum = sum + b[j] * pow(16, i - j - 1);
}
tentotwo(sum);
}
void sixteentoeight(char a[100])
{
int b[100];
int i = 0;
int j;
int sum = 0;
while(a[i] != '\0'){
if(a[i] >= '0' && a[i] <= '9')
b[i] = a[i] - '0';
else
b[i] = a[i] - '0' - 39;
i++;
}
for(j = 0; j < i; j++){
sum = sum + b[j] * pow(16, i - j - 1);
}
tentoeight(sum);
}
void a(){
int flag;
int n;
printf("请选着转为几进制数:\n");
printf("********************\n");
printf("1:二级制 2:八进制 3:十六进制 \n");
printf("********************\n");
scanf("%d", &flag);
system("CLS");
switch(flag){
case 1:
printf("请输入被转化数:");
scanf("%d", &n);
system("CLS");
printf("\n");
tentotwo(n);
break;
case 2:
printf("请输入被转化数:");
scanf("%d", &n);
system("CLS");
printf("\n");
tentoeight(n);
break;
case 3:
printf("请输入被转化数:");
scanf("%d", &n);
system("CLS");
printf("\n");
tentosixteen(n);
break;
}
}
void b(){
int flag;
int n;
printf("请选着转为几进制数:\n");
printf("********************\n");
printf("1:十级制 2:八进制 3:十六进制 \n");
printf("********************\n");
scanf("%d", &flag);
system("CLS");
switch(flag){
case 1:
printf("请输入被转化数:");
scanf("%d", &n);
system("CLS");
printf("\n");
twototen(n);
break;
case 2:
printf("请输入被转化数:");
scanf("%d", &n);
system("CLS");
printf("\n");
twotoeight(n);
break;
case 3:
printf("请输入被转化数:");
scanf("%d", &n);
system("CLS");
printf("\n");
twotosixteen(n);
break;
}
}
void c(){
int flag;
int n;
printf("请选着转为几进制数:\n");
printf("********************\n");
printf("1:二级制 2:十进制 3:十六进制 \n");
printf("********************\n");
scanf("%d", &flag);
system("CLS");
switch(flag){
case 1:
printf("请输入被转化数:");
scanf("%d", &n);
system("CLS");
printf("\n");
eighttotwo(n);
break;
case 2:
printf("请输入被转化数:");
scanf("%d", &n);
system("CLS");
printf("\n");
eighttoten(n);
break;
case 3:
printf("请输入被转化数:");
scanf("%d", &n);
system("CLS");
printf("\n");
eighttosixteen(n);
break;
}
}
void d(){
int flag;
char a[100];
printf("请选着转为几进制数:\n");
printf("********************\n");
printf("1:二级制 2:十进制 3:八进制 \n");
printf("********************\n");
scanf("%d", &flag);
system("CLS");
switch(flag){
case 1:
printf("请输入被转化数:");
scanf("%s", a);
system("CLS");
printf("\n");
sixteentoeight(a);
break;
case 2:
printf("请输入被转化数:");
scanf("%s", a);
system("CLS");
printf("\n");
sixteentoten(a);
break;
case 3:
printf("请输入被转化数:");
scanf("%s", a);
system("CLS");
printf("\n");
sixteentoeight(a);
break;
}
}
void e(){
exit(-1);
}
int main()
{
int i, j , flag, flag1;
while(1){
printf("********************\n");
printf("1:开始转换\n");
printf("2:结束转换\n");
printf("********************\n");
scanf("%d", &flag1);
system("cls");
if(flag1 == 1){
printf("请选择输入几进制数\n");
printf("********************\n");
for(i = 0; i < 6; i++)
{
for(j = 0; j < 20; j++)
{
if(i == 1 && j == 2)
printf("1:十进制");
else
if(i == 2 && j ==2)
printf("2:二进制");
else
if(i == 3 && j== 2)
printf("3:八进制");
else
if(i == 4 && j == 2)
printf("4:十六进制");
else
if(j == 0)
printf("*");
else
if((i == 1) && j == 12)
printf("*");
else
if(i == 2 && j == 12)
printf("*");
else
if(i == 0 && j == 19)
printf("*");
else
if(i == 3 && j == 12)
printf("*");
else
if(i == 4 && j == 10)
printf("*");
else
if(i == 5 && j== 19)
printf("*");
else
printf(" ");
}
printf("\n");
}
printf("********************\n");
scanf("%d", &flag);
system("CLS");
switch(flag){
case 1 : a(); break;
case 2 : b(); break;
case 3 : c(); break;
case 4 : d(); break;
}
}
else
e();
printf("\n");
}
return 0;
}