基础练习 十六进制转八进制(ACMORE1566)
题目
Description
给定n个十六进制正整数,输出它们对应的八进制数。
Input
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0 ~ 9、大写字母A ~ F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
Output
输出n行,每行为输入对应的八进制正整数。
Sample Input
2
39
123ABC
Sample Output
71
4435274
Hint
提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
Source
蓝桥杯
题目链接: https://acmore.cc/problem/LOCAL/1566
简析
用Java写的话,利用BigInteger类封装好的方法即可
AC的代码
Java版
import java.io.BufferedInputStream;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(new BufferedInputStream(System.in));
int n = scanner.nextInt();
scanner.nextLine();
String hex = null;
BigInteger dec = null;
for(int i = 0; i < n; i++){
hex = scanner.nextLine();
dec = new BigInteger(hex, 16);
System.out.println(dec.toString(8));
}
}
}
C版
#include <stdio.h>
#include <string.h>
char six[1000000];
char eight[1000000];
char two[1000000];
int main(void)
{
int n, t;
int i, j, k;
int lensix, lentwo, leneight;
scanf("%d", &t);
getchar();
while(t--){
gets(six);
lensix = strlen(six);
for(i = 0, j = 0; i < lensix; i++, j += 4){
if(six[i] == '0'){
two[j] = '0'; two[j+1] = '0'; two[j+