進数変換-HDOJ 2031
1507 ワード
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
もう1つの簡単な解法:
#include<stdio.h>
#define maxn 1000
char c[maxn];//
int exchange(int n,int m)
{
int l = 0;
if (n < 0)// 。
{
n = -n;
}
while (n)
{
c[l++] = n % m + (n % m > 9 ? 'A'-10 : '0');// 。
n /= m;
}
return l;
}
int main()
{
int n,m,l,i;
while(scanf("%d%d",&n,&m) != EOF)
{
l = exchange(n,m);// 。
if (n < 0)// 。
{
printf("-");
}
for(i = l - 1;i >= 0; i--)// 。
{
printf("%c",c[i]);
}
printf("
");
}
return 0;
}
もう1つの簡単な解法:
#include<iostream>
using namespace std;
const char d[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int main()
{
int n,r,k;
char s[100];
while(cin>>n>>r)
{
if(n<0)
{
n*=-1;
cout<<'-';
}
for(k=0;n>0;n/=r)
s[k++]=d[n%r];
while(--k>=0)
cout<<s[k];
cout<<endl;
}
return 0;
}