进制转换

1. 十六进制转二进制:
问题描述:
  给定n个十六进制正整数,输出它们对应的八进制数。
输入格式:
  输入的第一行为一个正整数n表示要输入的十六进制数个数。
输出格式:
  输出n行,每行为输入对应的八进制正整数。
样例输入:
  2
  39 123ABC
样例输出:
  71
  4435274
  
Java代码:

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		String s1;
		String s2;
		char[] c;
		char[] s22;
		
		for(int i=0; i<n; i++) {
			//接收键盘输入的字符串
			s1 = sc.next();
			
			//将输入的字符串逐个字符保存到数组中
			c = new char[s1.length()];
			for (int j = 0; j < c.length; j++) {
				c[j] = s1.charAt(j);
			}
			
			//进行处理的字符串
			s2 = "";
			for (int j = 0; j < c.length; j++) {
				//先把s1输入的16进制数字转换为2进制保存在串s2中
				switch (c[j]) {
				case '0':
					s2+="0000"; break;
				case '1':
					s2+="0001"; break;
				case '2':
					s2+="0010"; break;
				case '3':
					s2+="0011"; break;
				case '4':
					s2+="0100"; break;
				case '5':
					s2+="0101"; break;
				case '6':
					s2+="0110"; break;
				case '7':
					s2+="0111"; break;
				case '8':
					s2+="1000"; break;
				case '9':
					s2+="1001"; break;
				case 'A':
					s2+="1010"; break;
				case 'B':
					s2+="1011"; break;
				case 'C':
					s2+="1100"; break;
				case 'D':
					s2+="1101"; break;
				case 'E':
					s2+="1110"; break;
				case 'F':
					s2+="1111"; break;
				default:
					break;
				}
			}
			
			/*
			 * 一个8进制数需要三位2进制数表示
			 * 2进制 ~ 8进制
			 * 000 ~ 0、001 ~ 1、010 ~ 2、011 ~ 3
			 * 100 ~ 4、101 ~ 5、110 ~ 6、111 ~ 7
			 */
			if(s2.length()%3==1)
				s2="00"+s2;
			if(s2.length()%3==2)
				s2="0"+s2;
			
			//把串s2逐位存入数组s22中
			s22 = new char[s2.length()];
			for (int k = 0; k < s22.length; k++) {
				s22[k] = s2.charAt(k); 
			}
			
			//定义一个标志位,让8进制数不从0开始
			int t = 0;
			for (int k2 = 0; k2 < s22.length-2; k2+=3) {
				//将每三位2进制数转换为一位8进制数
				int s = 4*(s22[k2]-'0') + 2*(s22[k2+1]-'0') + s22[k2+2] - '0';
				//当首位不为0时,输出
				if(s!=0)
					t = 1;
				if(t!=0)
					System.out.print(s);
			}
			System.out.println();
		}		
	}
}

程序运行结果:

2. 十六进制转十进制
问题描述:
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入:
  FFFF
样例输出:
  65535
Java代码:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		String s = sc.nextLine();
		
		//将字符串转换为字符数组
		char[] c = s.toCharArray();
		int n = c.length;
		long sum = 0;
		for(int i=0;i<n;i++)
		{
			if(((int)c[i]-48)>9)
			{
				if(c[i]=='A')
					sum+=(long) (10*Math.pow(16, n-i-1));
				if(c[i]=='B')
					sum+=(long) (11*Math.pow(16, n-i-1));
				if(c[i]=='C')
					sum+=(long) (12*Math.pow(16, n-i-1));
				if(c[i]=='D')
					sum+=(long) (13*Math.pow(16, n-i-1));
				if(c[i]=='E')
					sum+=(long) (14*Math.pow(16, n-i-1));
				if(c[i]=='F')
					sum+=(long) (15*Math.pow(16, n-i-1));
			}
			else
			{
				sum+=(long) ((c[i]-48)*Math.pow(16, n-i-1));
			}
		}
		System.out.println(sum);
	}
}

程序运行结果:
在这里插入图片描述
3.十进制转十六进制:
问题描述:
  十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。
输入格式:
  输入包含一个非负整数a,表示要转换的数。
输出格式:
  输出这个整数的16进制表示
样例输入:
  30
样例输出:
  1E
Java代码:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int i = 0;
        char[] S = new char[100];
        if(n == 0){
            System.out.print(0);
        }
        else{
            while(n!=0)  
            {
                int t=n%16;
                if(t >=0 && t<10)  
                {
                    S[i] = (char)(t+'0');
                    i++;
                }
                else
                {
                    S[i] = (char)(t+'A'-10);
                    i++;
                }
                n/=16;
            } 
            
            for (int j=i-1;j>=0;j--)
            {  
                System.out.print(S[j]);
            }
        }
	}
}

程序运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bu Sir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值