ECNU OJ 1147 进制转换

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

Input

输入一个正整数 T。表示测试数据的组数。

每个测试实例包含两个整数 N(32 位整数) 和 R (2<=R<=36).

Output

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

#include<iostream>
using namespace std;
long int n,r;
char a[36]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int work(long int n)
{
    if(n<r)
    {
       cout<<a[n];
       return n;
    }
    else
    {
       work((n-n%r)/r);
       cout<<a[n%r];
    }
}

void work2(long int n)
{
    int z[100], num=0;
    do {
        z[num++] = n % r;
        n = n / r;
    } while (n != 0);

    for (int i= num - 1; i>=0; i--){
        cout << a[z[i]];
    }

}
int main()
{
    long int t,i,j;
    bool check=0;
    cin>>t;
    for(i=0;i<t;i++)
    {
       check=0;
       cin>>n>>r;
       j=0;
       if(n<0)
       {
         check=1;
         n=-n;
         cout<<'-';
       }
       work2(n);
       cout<<endl;
    }
}

 

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注