一、十进制n转化为k进制
将十进制整数n(−231≤n≤231−1)转换成k(2≤k≤16)进制数。注意,10~15分别用字母A、B、C、D、E、F表示。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据输入两个整数n和k。
输出格式:
对于每组测试,先输出n,然后输出一个空格,最后输出对应的k进制数。
输入样例:
4
5 3
123 16
0 5
-12 2
输出样例:
5 12
123 7B
0 0
-12 -1100
#include<stdio.h>
#include<math.h>
#define maxsize 1000
int main()
{
int n;
scanf("%d",&n);
int a[n][2];
for(int i=0;i<n;i++)
scanf("%d %d",&a[i][0],&a[i][1]);
for(int j=0;j<n;j++)
{
printf("%d ",a[j][0]);
//转化为k进制,余数的逆序,每除一次被除数换为商
int r[maxsize];
int z=0;
if(a[j][0]<0)
printf("-");
if(a[j][0]==0)
printf("0\n");
a[j][0]=abs(a[j][0]);
while(a[j][0]!=0)
{
r[z]=a[j][0]%a[j][1];
a[j][0]=a[j][0]/a[j][1];
z++;
}
//输出,处理负号,大于十时需转换
for(int k=z-1;k>=0;k--)
{
if(r[k]<10)
{
printf("%d",r[k]);
}
if(r[k]>=10)
{
printf("%c",r[k]+55);
}
if(k==0)
{
printf("\n");
}
}
}
return 0;
}