/* 程序问题注释开始
-
程序的版权和版本声明部分
-
Copyright © 2020,湖南工程职业技术学院信息工程学院学生
-
All rights reserved.
-
文件名称: 蓝桥杯赛题
-
作 者: 李 斌
-
完成日期: 2020 年 04 月 08日
-
版 本 号: 024
-
对任务及求解方法的描述部分
-
问题描述
给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。 -
输入格式
用户输入三个字符,每个字符取值范围是0-9,A-F。然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出,十六进制表示成3位,八进制表示成4位,若不够前面补0。(不考虑输入不合法的情况) -
输入样例
1D5 -
输出样例
(注意冒号后面有一个空格)
Hex: 0x1D5
Decimal: 469
Octal: 0725 -
程序问题注释结束
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//用户输入三个的字符的字符串
String str=in.next();
//创建十六进制表
char[] arr= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//十六进制
System.out.println("Hex: 0x"+str);
int sum=0;
//存储字符个数减1
int cnt=str.length()-1;
//遍历每个字符
for(int i=0;i<str.length();i++)
{
//与十六进制表比较
for(int j=0;j<arr.length;j++)
{
if(arr[j]==str.charAt(i))
{
//按权相加
sum+=j*Math.pow(16, cnt);
break;
}
}
//权递减
cnt--;
}
//输出十进制
System.out.println("Decimal: "+sum);
int result=0;
int temp=1;
//短除法
while(sum>0)
{
//扩大当前数一位并加上之前数
result+=sum%8*temp;
sum/=8;
//扩大位数
temp*=10;
}
int count=0;
//记录当前数的位数
while(temp>0)
{
count++;
temp/=10;
}
//输出八进制表头
System.out.print("Octal: ");
for(int i=count;i<=4;i++)
{
//输出补的0
System.out.print(0);
}
//判断是否输入字符全0,防止多输出0
if(result!=0)
{
//输出八进制值
System.out.println(result);
}
}
}
运行结果: