当前位置:文档之家› 各进制之间转换代码(c++)

各进制之间转换代码(c++)

#include
using namespace std;
#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct{
int *base;
int *top;
int stacksize;
}stack;
int getdex()
{
char a[50];
int n,j,i,sum=0,t=0,p=1;int x;
printf("输入要转化M进制数:");
scanf("%d",&x);
printf("输入一个进制数x:");
cin.get();

gets(a);
n=strlen(a);
for(i=n-1;i>=0;i--)
{p=1;
if(a[i]<=57)
t=a[i]-48;
else
t=a[i]-55;
if(i==n-1)
{
p=1;
}
else
for(j=0;j{p=p*x;

}
sum+=t*p;
}
printf("对应的十进制数:%d\n",sum);
return sum;
}
void array(int N)
{char HexNum[]="0123456789ABCDEF";
char a[1000]={0};
printf("输入转化后的进制数N:");
int q;
scanf("%d",&q);
int i=0,m=0;
while(N)
{
a[i]=HexNum[N%q];
i=i+1;
N=N/q;
}

m=i;
for(i=m+1;i>=0;i--)
{
printf("%c",a[i]);
}
cout<}
void initstack(stack&s)
{
s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
//return s;
}
void push(stack &s,char e)
{
if(s.top-s.base>=s.stacksize){
s.base=(int *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int));
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top=e;
s.top=s.top+1;
//return s;
}
void pop(stack s)
{
int e;
while(s.top!=s.base)
{e=*--s.top;
if(e>9)
printf("%c",e);
else
printf("%d",e);
}
}
void prind_d(int n,int c)
{
switch(c)
{
case 10:
{
if(n<0)
{
putchar('-');
n=-n;
}
if(n/10)
prind_d(n/10,10);
putchar(n%10+'0');
break;
}
case 8:
{
if(n/8)
prind_d(n/8,8);
putchar(n%8+'0');
break;
}
case 16:
{
if(n<0)
{
putchar('-');
n=-n;
}
char ch[]="0123456789ABCDEF";
if(n/16)
prind_d(n/16,16);
putchar(ch[n%16]);
break;
}
case 2:
{
if(n/2)
prind_d(n/2,2);
putchar(n%2+'0');
break;
}
}
}
void Array()
{
printf("数组方法的运行结果:\n");
int a;
a=getdex();
array(a);
}
void Stack()
{
printf("栈方法的运行结果:\n");
stack s;
int N,temp;
initstack(s);
N=getdex();


printf("请输入转换后的进制数N:");
int n;
scanf("%d",&n);
while(N)
{
temp=(int)N%n;
if(temp>9)
{temp=(char)(temp+55);}
push(s,temp);
N=N/n;
}
printf("转换成的N=%d进制数:\n",n);
pop(s);
printf("\n");
}
void Prind()
{printf("递归方法的运行结果:\n");
int c,m;
m=getdex();
cout<<"请输入转化后的进制数N:";
cin>>c;
cout<<"转换成的"<prind_d(m,c);
cout<}
void main()
{printf("\n\n--------------------------------------------------------\n\n");
printf("****欢迎使用本程序!本程序完成M进制数转换成N进制数。****\n\n");
printf("--------------------------------------------------------\n");
do{
printf("\t\t***********

*数组1***********\n");
printf("\t\t************栈 2***********\n");
printf("\t\t************递归3***********\n");
printf("\t\t************退出4***********\n");
printf("请按键选择:\n");
int n;
cin>>n;
switch(n)
{
case 1:
Array();continue;
case 2:
Stack();continue;
case 3:
Prind();continue;
case 4:exit(0);
default:printf("输入有误!");
}
}
while(1);
}

相关主题
文本预览
相关文档 最新文档