1252進変換

5867 ワード

進数変換Time Limit:1000 ms Memory Limit:65536 KiB
Problem Description 10進数Nを入力し、R進数出力に変換します.Input入力データは、2つの整数N(32ビット整数)およびR(2<=R<=16,R!=10)を含む複数の試験例を含む.Outputは、テストインスタンスごとに変換された数を出力し、出力ごとに1行を占めます.Rが10より大きい場合、対応する数値規則は16進数(例えば、10はAで表されるなど)を参照する.Sample Input 7 2 23 12 -4 3 Sample Output 111 1B -11 Hint
Source HDOJ THINK:mの値の範囲によって分類し、m>10の場合は別の配列を開く.文字があるため、数字を文字に変換することに注意し、直接+‘0’;m<10のときは直接スタックに入ればいいです.また、この2つの場合、nが負数である場合は「-」の出力を行うことに注意しなければならない.
#include
#include
#include
int a[500];
char b[200];// m>10 ABCDEF 
int main()
{
    int n,m,top,top2;
    while(~scanf("%d%d",&n,&m))
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        top=0;top2=0;
        int t;
        if(n==0)printf("0
"
); else { if(n<0) {t=n;n=-n;}// else t=n; if(m>10)// { while(n!=0) { int s; s=n%m; n=n/m; //printf("%d ",s); if(s==10) { b[++top2]='A'; } else if(s==11) { b[++top2]='B'; } else if(s==12) { b[++top2]='C'; } else if(s==13) { b[++top2]='D'; } else if(s==14) { b[++top2]='E'; } else if(s==15) { b[++top2]='F'; } else b[++top2]=s+'0';// } if(t<0) { printf("-"); } while(top2!=0) { printf("%c",b[top2--]); } printf("
"
); } else { while(n!=0) { int s=n%m; n=n/m; a[++top]=s; } if(t<0) { printf("-"); } while(top!=0) { printf("%d",a[top--]); } printf("
"
); } } } return 0; }