不吃的你学过C语言没有,我用c语言写过一个不同进制数相互转换的程序,我可以给你源代码,或者编译后的程序!#include"stdio.h"
#define size 100
#include"math.h"
#include"string.h"
typedef struct
{
float elem[size];
int top;
}seqStack;
void createStack(seqStack *L) /*栈的初始化*/
{
L=(seqStack*)malloc(sizeof(seqStack)) ;
while(L==NULL)
{
L=(seqStack*)malloc(sizeof(seqStack));
}
L->top=-1; /*为什么这句会有问题*/
}
void push(seqStack *L,int s) /*进栈*/
{
if(L->top==size)
{
printf("zhan yi man\n");
return;
}
L->top++;
L->elem[L->top]=s;
}
int pop(seqStack *L)
{ /*出栈*/
int x;
if(L->top==-1) return;
x=L->elem[L->top];
L->top--;
return x;
}
int char_int(char str[]) /*将字符串变成真正的数字存入数组*/
{
int i,s,j,m;
m=strlen(str);
for(i=0;i
for(j=48;j<=69;j++) /*通过asc码转换大写F的asc码是69*/
{
if(j==str[i])
if(j<64)
str[i]=s;
else
{
switch(j)
{
case'A':str[i]=10;break;
case'B':str[i]=11;break;
case'C':str[i]=12;break;
case'D':str[i]=13;break;
case'E':str[i]=14;break;
case'F':str[i]=15;break;
}
break;
}
s++;
}
}
return m; /*由于转换过后变成了int型用strlen()函数会有问题*/
}
void zhuanzhi(seqStack *L)
{
int i,m,n,j=0,sum=0,s,x,p;
char str[size];
L->top=-1;
printf("top %d\n",L->top);
printf("ni yao shu ru de shi ji jin zhi shu?\n");
scanf("%d",&m);
printf("qing shu ru yi ge string\n");
if(m!=10)
{
scanf("%s",str); /*不为十进制时一字符串输入*/
if(m==16) strupr(str); /*把用户可能输入的小写转换成大写*/
i=char_int(str)-1; /*将字符变为数字*/
}
else
{ /*如果是十进制就以整形输入*/
scanf("%d",&str[0]);
sum=str[0];
}
printf("ni yao zhuan huan dao de jin zhi shu shi?\n");
scanf("%d",&n);
if(m!=10)
for(;i>=0;i--) /*如果不是十进制转换为十进制*/
{
sum=sum+str[i]*pow(m,j); /*转换算法,m为被转的进制数*/
j++ ;
}
printf("%d jin zhi wei\n",n);
if(n==10)
printf("%d\n",sum);
else
{ while(sum!=0) /*装换为n进制数*/
{
s=sum%n; /*n为想要转到的进制数*/
push(L,s); /*将结果进栈*/
sum=(int)(sum/n); /*将sum除n取整*/
}
if(n!=16)
while(L->top>-1)
{
printf("%d",pop(L));
}
else /*16进制时的输出,用两个输出是为了节约时间*/
while(L->top!=-1)
{
i=pop(L);
if(i>9)
{
x=64;
for(j=10;j<16;j++)
{
if(j==i)
{
printf("%c",x);
break;
}
x++;
}
}
}
printf("\n");
}
}
main(void)
{
seqStack *L;
createStack(L);
zhuanzhi(L);
getch();
return 0;
}
八进制是657,十进制是431,十六进制是1AF
八进制:657十进制:431十六进制:1AF