进制转换

来源:互联网 发布:密码算法库 编辑:程序博客网 时间:2024/06/05 02:59

进制转换

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

输入一个十进制数N,将它转换成R进制数输出。

输入

输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R != 10)。

输出

为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。

示例输入

7 223 12-4 3

示例输出

1111B-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的表示

0 0
原创粉丝点击