PTA 7-239 进制转换
分数 10
作者 usx程序设计类课程组
单位 绍兴文理学院
将十进制整数转换成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
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <stdio.h>
void conversion(int inte, int arr[], int k, int *count){ //拆分整数并储存到数组中
int _inte;
int p = 0; //数组下标
if(inte < 0){
inte = -inte;
}
while(inte > 0){ //拆分
(*count)++;
_inte = inte;
_inte %= k; //余数
arr[p] = _inte; //余数储存到数组中
inte /= k; //商
p++;
}
}
int main(){
int n; //测试组数
int arr[100];
int k; //k进制
int integer; //整数
int count; //记录位数
int *cnt = &count; //定义指针,指向count
scanf("%d", &n);
for(int i = 1; i <= n; i++){ //测试组数
count = 0; //每组测试将位数初始化
scanf("%d %d", &integer, &k);
if(integer == 0){ //输入的整数为0时
printf("%d 0\n", integer);
continue;
}
conversion(integer, arr, k, cnt); //调用函数
printf("%d ", integer);
if(integer < 0){ //输入的整数为负时
printf("-"); //输入负号
}
for(int j = count - 1; j >= 0; j--){ //结果输出
if(arr[j] >= 10){ //10~15分别用字母A、B、C、D、E、F表示
switch(arr[j]){
case 10:
printf("A");
break;
case 11:
printf("B");
break;
case 12:
printf("C");
break;
case 13:
printf("D");
break;
case 14:
printf("E");
break;
case 15:
printf("F");
break;
}
}else
printf("%d", arr[j]);
}
printf("\n");
}
return 0;
}
解题思路:
用输入的整数除进制数得到的余数并将该余数储存到数组中,考虑3种输出情况,即正数,负数和0;定义一个指针记录储存到数组中的次数作为输出的个数,再将数组反向输出就是进制转换后的数。需要注意的是,题目给的要求“10~15分别用字母A、B、C、D、E、F表示”。
归属知识点:
选择结构
函数调用
指针