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が負数である場合は「-」の出力を行うことに注意しなければならない.
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;
}