進数変換-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
 
#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;
}