#include <stdio.h>
#define MAXSIZE 32
typedef struct{
int *elem;
int max;
int top;
}Stack;
int InitStack(Stack *S,int n) /*初始化一个空栈*/
{
S->elem = (int *)malloc(n * sizeof(int));
if (S->elem == NULL)
return -1;
S->max = n;
S->top= 0;
return 0;
}
int Push(Stack *S,int item) /*把item入栈*/
{
if(S->top == S->max)
{
printf("Stack is full!/n");
return -1;
}
S->elem[S->top++]=item;
return 0;
}
int StackEmpty(Stack S) /*判断栈是否为空。是的话返回1*/
{
return ((!S.top) ? 1:0);
}
int Pop(Stack*S) /*把栈顶元素出栈*/
{
if (!S->top)
{
printf("Pop an empty stack!/n");
return -1;
}
return S->elem[--S->top];
}
void MultibaseOutput(long n,int B) /*把10进制整数n转化为B进制数*/
{
int m;
Stack S;
if (InitStack(&S,MAXSIZE))
{
printf("Failure!/n");
return;
}
do
{
if (Push(&S,n%B))
{
printf("Failure!/n");
return;
}
n = n/B;
}while (n != 0);
while (!StackEmpty(S))
{
m = Pop(&S);
if (m < 10)
printf("%d",m);
else
printf("%c",m + 55);
}
}
#include <stdio.h>
long atoi(char s[],int b) /*把s[]里的字符串转化为b进制的整数*/
{
int i,n;
n=0;
for(i=0;s[i]>='0'&&s[i]<='9';++i)
n=b*n+(s[i]-'0');
return n;
}
main()
{
long m,b1,b2;
int i=0;
char c;
char *sm,*sb1,*sb2;
printf("A$="); /*输入 m<b>B*/
for(c=getchar();c!='<';c=getchar()) /*把'<'之前的字符即m,存入数组sm[]中*/
sm[i++]=c;
sm[i]='/0';
for(c=getchar(),i=0;c!='>';c=getchar()) /*把'<'和'>'之间的字符即b,存入sb1[]中*/
sb1[i++]=c;
sb1[i]='/0';
for(c=getchar(),i=0;c!='/n';c=getchar())/*把'>'之后回车之前的字符即B,存入sb2[]中*/
sb2[i++]=c;
sb2[i]='/0';
b1=atoi(sb1,10); /*把sb1中的字符串转化为10进制整数,并附给b1*/
b2=atoi(sb2,10); /*把sb2中的字符串转化为10进制整数,并附给b2*/
m=atoi(sm,b1); /*把sm中的字符串转化为b1进制整数,并附给m*/
printf("%s<%s>%s=",sm,sb1,sb2);
MultibaseOutput(m,b2); /*把b1进制的整数m,转化为b2进制,并输出结果*/
printf("<%ld>",b2);
getch();
}