蓝桥杯练习——十进制转换十六进制
程序员文章站
2024-03-17 14:57:10
...
蓝桥杯练习——十进制转换十六进制
问题
【问题描述】
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。
【输入格式】
输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
【输出格式】
输出这个整数的16进制表示
【样例输入】
30
【样例输出】
1E
思路
先把十进制转换成二进制,再把二进制转化成十六进制
详细:对于十进制数,先变成二进制的01字串,进栈;不要忘了补上0使得个数是4的倍数。然后4个一组出栈,组成一个十六进制数,最后把大于9的部分转换成相应的字母
代码
import java.util.Scanner;
import java.util.Stack;
//十进制转十六进制
public class Main {
public static char outof10(int n) {
char x;
switch (n) {
case 10: {
x='A';break;
}
case 11: {
x='B';break;
}
case 12: {
x='C';break;
}
case 13: {
x='D';break;
}
case 14: {
x='E';break;
}
default: {
x='F';break;
}
}
return x;
}
public static void change(int iT) {
Stack<Integer> stack=new Stack<>();
char []chSixt=new char[100];
int i,len=0,j,x,sum=0,l=0;
while(iT!=0) { //十进制转二进制
x=iT%2;
stack.push(x);
len++; //len是所有进栈的01的长度
iT/=2;
}
if(len%4!=0) { //补0,使得个数正好是4的倍数
int a=(len%4);
for(j=0;j<4-a;j++) {
stack.push(0);
l++;
}
len+=l;
}
int count=len/4; //一共转化成len/4位的16进制数
//System.out.print(len/4);
for(i=0;i<count;i++) {
int base=8;
sum=0;
for(j=0;j<4;j++) {
x=stack.pop();
sum+=x*base;
base/=2;
}
if(sum>=10) {
chSixt[i]=outof10(sum);
}
else {
chSixt[i]=(char) (sum+'0');
}
}
for (char c : chSixt) { //输出16进制数
System.out.print(c);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int iTen=scanner.nextInt();
if(iTen!=0) {
change(iTen);
}
else {
System.out.print(0);
}
}
}
上一篇: 牛客网:吃货 (二分模拟)
下一篇: c语言-二分查找法