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]);
}
}
}
}
程序运行结果: