目录
说明:
仅作为自己学习、复习算法的小笔记
1.String和int之间的相互转化:
//string转换成int :
Integer.valueOf("12")
//int转换成string :
String.valueOf(12)
2.java的栈Stack
方法摘要(来自API1.6.0)
方法 | 说明 |
---|---|
boolean empty() | 测试堆栈是否为空 |
E peek() | 查看堆栈顶部的对象,但不从堆栈中移除它 |
E pop() | 移除堆栈顶部的对象,并作为此函数的值返回该对象 |
E push(E item) | $1 |
int search(Object o) | 返回对象在堆栈中的位置,以 1 为基数 |
3.String(字符串)截取某个char
(来自API1.6.0)
方法 | 说明 |
---|---|
char charAt(int index) | 返回指定索引处的 char 值 |
4. char的封装类是Character
5. Java提供的数据格式化类DecimalFormat的format方法
示例:
public static void main(String[] args) {
int a = new Scanner(System.in).nextInt();
String b = new DecimalFormat("#.0000000").format(Math.PI*a*a);
System.out.println(b);
}
6. Java提供的数组排序sort
示例:
// a 为数组
Arrays.sort(a);
7. 2^n,进制转换
十进制数 | 二进制数 | 二进制数长度 |
---|---|---|
2^2-1=3 | 11 | 2 |
2^3-1=7 | 111 | 3 |
2^4-1=15 | 1111 | 4 |
由此可知,不同进制对应的二进制为:
进制 | 进制数 | 二进制数 |
---|---|---|
4 | 11 | 0101 |
8 | 11 | 001001 |
16 | 11 | 00010001 |
所以 2^n 进行进制转换,都可以先转化成二级制,再转化成需要的进制。
比如十六转八进制,就可以十六转二转八。
具体实现流程,可以参考蓝桥杯→基础练习→十六进制转八进制试题。
连接:http://lx.lanqiao.cn/problem.page?gpid=T51
题目:
试题 基础练习 十六进制转八进制
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
解题方案:
public class b_2_十六进制转八进制 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int cnt=0;cnt<n;cnt++){
String str = sc.next();
StringBuilder str2 = To_binary(str);
To_Octal(str2);
}
}
/**
* 将十六机制专为二进制
* @param str
* @return
*/
public static StringBuilder To_binary(String str){ //16进制转换为2进制
StringBuilder str2 = new StringBuilder(); //StringBuilder用来申明可变字符串
for(int i=0;i<str.length();i++){
char c = str.charAt(i);
switch(c){
case '0':
str2.append("0000");break;
case '1':
str2.append("0001");break;
case '2':
str2.append("0010");break;
case '3':
str2.append("0011");break;
case '4':
str2.append("0100");break;
case '5':
str2.append("0101");break;
case '6':
str2.append("0110");break;
case '7':
str2.append("0111");break;
case '8':
str2.append("1000");break;
case '9':
str2.append("1001");break;
case 'A':
str2.append("1010");break;
case 'B':
str2.append("1011");break;
case 'C':
str2.append("1100");break;
case 'D':
str2.append("1101");break;
case 'E':
str2.append("1110");break;
case 'F':
str2.append("1111");break;
default:break;
}
}
return str2;
}
/**
* 将二进制专为八进制
* @param str
*/
public static void To_Octal(StringBuilder str){ //转为8进制,转1位输出1位
System.out.println(str);
int len = str.length();
int ans=0,s = 0;
if(len % 3==1){ //最高位的补零模拟
//charAt(0)返回此序列中指定索引处的 char 值。
ans = str.charAt(0)-'0';
s+=1;
}else if(len % 3==2){
ans = (str.charAt(0)-'0')*2 + (str.charAt(1)-'0');
s+=2;
}
//对结果进制输出
if(ans>0)
System.out.print(ans);
boolean flog = true;
for(int i=s;i<str.length();i+=3){
ans =(str.charAt(i)-'0')*4+ (str.charAt(i+1)-'0')*2 + (str.charAt(i+2)-'0');
if(flog){
if(ans==0){
continue;
}else{
flog = false;
}
}
System.out.print(ans);
}
System.out.println();
}
}