#define _CRT_SECURE_NO_WARNINGS
#include <>
#include <>
#include <iostream>
#include <>
#include<>
using namespace std;
typedef struct SNode/定义一个栈,采用无头结点的单链表结构
{
int data;
struct SNode *next;
}SNode,*LinkStack;
bool Is_Empty(LinkStack S)
{
if(!S)
return true;
else
return false;
}
void InitStack(LinkStack &S)
{
S = NULL;
}
bool Push(LinkStack &S,int e)
{
SNode* p = (SNode*)malloc(sizeof(SNode)) ;
if(!p )
{
return false;
}
p->data = e;
p->next = S;
S=p;
return true;
}
bool Pop(LinkStack &S,char &e)
{
SNode* p ;
if(!S)
{
return false;
}
else
{
p = S;
e = p->data;
S = p->next;
free(p);
return true;
}
}
int Number_system_conversion_1(char arr[],int sz,float n1)
{
int i;
int j;
int n = 0;
int sum = 0;
for(i = 0;i<sz;i++)
{
char tmp = arr[sz-1-i];
switch(tmp)
{
case '1':
j = 1;
break;
case '2':
j = 2;
break;
case '3':
j = 3;
break;
case '4':
j = 4;
break;
case '5':
j = 5;
break;
case '6':
j = 6;
break;
case '7':
j = 7;
break;
case '8':
j = 8;
break;
case '9':
j = 9;
break;
case 'A':
j = 10;
break;
case 'B':
j = 11;
break;
case 'C':
j = 12;
break;
case 'D':
j = 13;
break;
case 'E':
j = 14;
break;
case 'F':
j = 15;
break;
}
int c =j * pow(n1,n);
n++;
sum = sum+c;
}
return sum;
}
void Number_system_conversion_2(int num_2,int n2)
{
LinkStack S;
InitStack(S);
char d;
while(num_2)
{
switch (num_2%n2)
{
case 0:
Push(S,'0');
break;
case 1:
Push(S,'1');
break;
case 2:
Push(S,'2');
break;
case 3:
Push(S,'3');
break;
case 4:
Push(S,'4');
break;
case 5:
Push(S,'5');
break;
case 6:
Push(S,'6');
break;
case 7:
Push(S,'7');
break;
case 8:
Push(S,'8');
break;
case 9:
Push(S,'9');
break;
case 10:
Push(S,'A');
break;
case 11:
Push(S,'B');
break;
case 12:
Push(S,'C');
break;
case 13:
Push(S,'D');
break;
case 14:
Push(S,'E');
break;
case 15:
Push(S,'F');
break;
}
num_2 = num_2/n2;
}
printf("转化后的数字为: ");
while(!(Is_Empty(S)))
{
Pop(S,d);
printf("%c",d);
}
printf("\n");
system("pause");
}
int main()
{
char arr[10];
int n1;
int n2;
printf("*************************数制转换****************************\n");
printf("**********输入**********\n");
printf("请输入一个数:");
scanf("%s",&arr);
printf("请输入原本的进制数(最高为16进制):");
scanf("%d",&n1);
printf("请输入想转换的进制(最高为16进制: ");
scanf("%d",&n2);
int sz = strlen(arr);
int num_2 = Number_system_conversion_1(arr,sz,n1);
printf("**********输出**********\n");
Number_system_conversion_2(num_2,n2);
return 0;
}