文章标题 基础练习 十六进制转八进制
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
下面附上我的代码:
package a;
import java.util.Scanner;
public class problem10 {
public static void main(String[] args) {// TODO Auto-generated method stubScanner cin=new Scanner(System.in);int n=cin.nextInt();String a[]=new String[n];int b[]=new int[n];for(int i=0;i='A'&&c<='F') aa=c-'A'+10;else aa=c-'0'+0;s+=aa*Math.pow(16, a[i].length()-1-j); }while(s!=0) {wei[k++]=s%2;s=s/2;} int a1=k/3;int b1=k%3; for(int i1=0;i1=0;i2--)b[i]+=wei[k-a1*3-1]*Math.pow(2,b1-1-i2);}for(int kk=0;kk
}
运行结果如下图所示:
给的提示是先将16进制转化为2进制,再转化为八进制,但是我试了一下感觉这两个过程处理起来以及存储结构都比较麻烦,网上别人的也有帖。我这里采用的思想是先转化为10进制,比如16进制的39,转化为10进制为3*16+9=57;57再转化为2进制,这里是111001,每三个分一组,表示为八进制就为71,这里a1表示每三位二进制的个数,b1表示总位数减去a1*3剩余的位数(一般取1或2),注意运算的时候wei[i](存放二进制每一位的数组)要逆序计算,这里仅将解题思路进行参考,方便以后引用。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
