文章标题 基础练习 十六进制转八进制

问题描述
  给定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 stub
     Scanner 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](存放二进制每一位的数组)要逆序计算,这里仅将解题思路进行参考,方便以后引用。

你可能感兴趣的:(蓝桥杯基础试题)