题目练习
蓝桥杯练习——十六进制转换十进制
问题
【问题描述】
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
【样例输入】
FFFF
【样例输出】
65535
注意
先把十六进制转化成二进制,再把二进制转化成十六进制。
这道题思路不难,但是做的时候还是要格外小心仔细的,我错了n遍才全通过。。。
先将十六进制的每个数拆出来化成二进制,再把组合的一整个二进制数化成十进制。存放二进制数的结构,上一道十进制转十六进制我用的栈,然后这次想当然也用的栈,结果就离谱了,后来才发现用队列
这里要注意几个地方:1.小于7的数转化成二进制时不足四位,要把0补上,否则之后算十进制时会错位
2.有的测试数据很大,相关的变量例如十进制数最终结果sum和中间用来相乘的base要用long型
代码
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class SixttoTen {
public static int outof10(char c) {
int x;
switch (c) {
case 'A': {
x=10;break;
}
case 'B': {
x=11;break;
}
case 'C': {
x=12;break;
}
case 'D': {
x=13;break;
}
case 'E': {
x=14;break;
}
default: {
x=15;break;
}
}
return x;
}
public static void change(String str) {
Queue<Integer> queue=new LinkedList<>();
int i,j,len=0,in,t,l=0,in1,x;
long sum=0,base=1;//l是专门用来记录每个数转化了多少位二进制数
for(i=chSixt.length-1;i>=0;i--) {
if(chSixt[i]>'9') {
in=outof10(chSixt[i]);
}
else {
in=chSixt[i]-'0';
}
//System.out.print(in+" ");
in1=in;
while(in1!=0) {
t=in1%2;
queue.offer(t);
in1/=2;
len++;
l++;
}
if(in<=7) {
for(j=1;j<=4-l;j++) {
queue.offer(0);len++;
}
}
l=0;
}
while(!queue.isEmpty()) {
x=queue.poll();
sum+=x*base;
base=base*2;
}
System.out.println(sum);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
String sSisxt=scanner.next();
change(sSisxt);
}
}
视频学习
蓝桥杯练习——日期问题
【例】
从XXXX年XX月XX日到XXXX年XX月XX日之间共有几天?
思路
如果直接减的话太麻烦,且容易出错,一个简单的方法就是以一个时间点为原点,一般以公元元年为起点计算从这个时间点到所求时间过了多久,再把两者相减即可
代码
import java.util.Scanner;
/*
* 要求:求两个日期的差值
* 思路:先设定一个原点,量日期的差值等于大的日期到原点的差值减小的日期到原点的差值
* 例:1915年2月24日到2020年11月6日
* */
public class DateDif {
public static boolean leepyear(int y) { //判断闰年
if(y%400==0||y%100!=0&&y%4==0) {
return true;
}
else return false;
}
public static int day_cul(int y,int m,int d) { //计算每个日期到原点的日子数
int i,sum=0;
for(i=0;i<y;i++) {
sum+=365;
if(leepyear(i)) {
sum++;
}
}
for(i=0;i<m;i++) {
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) {
sum+=31;
}
else if(i==4||i==6||i==9||i==11) {
sum+=30;
}
else {
sum+=28;
}
}
sum+=d;
return sum;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int year1,mon1,day1,year2,mon2,day2;
year1=scanner.nextInt();
mon1=scanner.nextInt();
day1=scanner.nextInt();
year2=scanner.nextInt();
mon2=scanner.nextInt();
day2=scanner.nextInt();
int res=day_cul(year2, mon2, day2)-day_cul(year1, mon1, day1);
System.out.println(res);
}
}