C语言进制转换

#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;
}

猜你喜欢

转载自blog.csdn.net/chen1042246612/article/details/81153505