为了账号安全,请及时绑定邮箱和手机立即绑定

怎么发

package Lanqiao_test01;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class HexadecimalToOctal {
	
	public static void main(String[] args) throws Exception{
		
		System.out.println("请按输入格式输入:");
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine()); // 第一行: 行个数
		
		String[] str = new String[n];
		for(int i=0; i<str.length; ++i){
			str[i] = br.readLine();
		}
		
		
		for(int j=0; j<n; ++j){
			transform1(str[j]);
		}
		
	}
	
	
	/*	transform1: 将输入的十六进制转化为二进制
	 * 	1. 将十六进制字符串转化为字符数组c1
	 *  2. 将单个十六进制字符转化为二进制数(1位16进制 对应 4位二进制) 用sb接收
	* */
	public static void transform1(String s1){
		char[] c1 = new char[s1.length()];
		c1 = s1.toCharArray();
		StringBuffer sb = new StringBuffer();
		
		for(int i=0; i<c1.length; ++i){
			switch(c1[i]){
			case '0':
				sb.append("0000");
				break;
			case '1':
				sb.append("0001");
				break;
			case '2':
				sb.append("0010");
				break;
			case '3':
				sb.append("0011");
				break;
			case '4':
				sb.append("0100");
				break;
			case '5':
				sb.append("0101");
				break;
			case '6':
				sb.append("0110");
				break;
			case '7':
				sb.append("0111");
				break;
			case '8':
				sb.append("1000");
				break;
			case '9':
				sb.append("1001");
				break;
			case 'A':
				sb.append("1010");
				break;
			case 'B':
				sb.append("1011");
				break;
			case 'C':
				sb.append("1100");
				break;
			case 'D':
				sb.append("1101");
				break;
			case 'E':
				sb.append("1110");
				break;
			case 'F':
				sb.append("1111");
				break;	
			}
		}
		
		transform2(sb);
		
	}
	
	
	/*
	 * transform2: 二进制 转 八进制 并输出结果
	 * 	转换算法: 1.	增补二进制位数,以3位二进制数表示1位八进制数.若长度不合适,进行补0或减0操作
	 * 			2.  对二进制与十进制之间进行转化, 用sb2进行接收
	 * */
	public static void transform2(StringBuffer sb){
	
		int sbLen = sb.length();
		
		if(sbLen % 3 == 0){
			if(sb.substring(0, 3).equals("000"))
				sb.delete(0, 3);
		}
		
		if(sbLen % 3 == 1){
			if(sb.substring(0, 1).equals("0"))
				sb.delete(0, 1);
			else
				sb.insert(0, "00");
		}
		
		if(sbLen % 3 == 2){
			if(sb.substring(0, 2).equals("00"))
				sb.delete(0, 2);
			else
				sb.insert(0, "0");
		}
		
		//001 010 101 ...
		int n = sb.length()/3;

		StringBuffer sb2 = new StringBuffer();
		
		for(int i=0; i<n; i++){
		
			if("000".equals(sb.substring(i*3, i*3+3))) //0,3  3,6   i*3, i*3+3  
				sb2.append("0");
			else if("001".equals(sb.substring(i*3, i*3+3)))
				sb2.append("1");
			else if("010".equals(sb.substring(i*3, i*3+3)))
				sb2.append("2");
			else if("011".equals(sb.substring(i*3, i*3+3)))
				sb2.append("3");
			else if("100".equals(sb.substring(i*3, i*3+3)))
				sb2.append("4");
			else if("101".equals(sb.substring(i*3, i*3+3)))
				sb2.append("5");
			else if("110".equals(sb.substring(i*3, i*3+3)))
				sb2.append("6");
			else if("111".equals(sb.substring(i*3, i*3+3)))
				sb2.append("7");
		
		}
		
		
		System.out.println(sb2);
	}
}


正在回答

1 回答

我表示这是java虽然不会但是主题结构应该和差c++差不多

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Linux Guide for Developers
  • 参与学习       54726    人
  • 解答问题       169    个

Linux命令行世界生存指南,让本课程成为你初 Linux世界的向导

进入课程
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号