进制转换
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
输入一个十进制数N,将它转换成R进制数输出。
输入
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R != 10)。
输出
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
示例输入
7 2 23 12 -4 3
示例输出
111 1B -11
#include <stdio.h>
#include <stdlib.h>typedef struct {
int *base;
int *top;
int Lsize;
}Sqstack;
Sqstack push(Sqstack &s,int e){
*s.top++=e;
}
int pop(Sqstack &s,int &a){
if(s.top==s.base)return -1;
s.top--;a=*s.top ; return a ;
}
int Empty(Sqstack &s){
if(s.top==s.base) return 0;
else return 1;
}
char clearstack(Sqstack &s){
s.top=s.base;
}
int main(){
int n,m,e;
Sqstack S;
while (scanf("%d%d",&n,&m)!=EOF){
int flag=0; //flag每次都要清零。
S.base=(int *)malloc(1010*sizeof(int));
S.top=S.base;
if(n==0) {printf("0");}
else while(n){
if(n<0) {n=-n; flag=1;}
push(S,n%m);
n=n/m;
}
if(flag==1) printf("-");
while (Empty(S)){
e=pop(S,e);
if(e==10) { printf("A");}
else if(e==11) { printf("B");}
else if(e==12) { printf("C");}
else if(e==13) { printf("D");}
else if(e==14) { printf("E");}
else if(e==15) { printf("F");}
else printf("%d",e);
}
printf("\n");
clearstack(S);
}
}
注意考虑 0,负数,还有ABCDEF的表示