十六进制转八进制
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
解题思路:
将十六进制转换为二进制,一位十六进制转换为4个二进制,在将三个二进制转换为1个八进制,在将二进制转换为八进制时,记得将不能整除3的补0方便计算,同时记得判断二进制前面是否为“000“。
import java.util.*;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String c="";
String[] aa = new String[n];
for (int j = 0; j < n; j++) {
aa[j]=sc.next();
}
sc.close();
for (int j=0;j<n;j++){
c=fun(aa[j]);
if(c.length()%3==1)
c=0+c;
if(c.length()%3==2)
c=0+c;
String strOctal = toOctal(c);
System.out.println(strOctal);
c="";
}
}
static String fun(String a){
String[] b={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};
StringBuffer c=new StringBuffer();
for(int i=0;i<a.length();i++) {
char d=a.charAt(i);
if (d >= '0' && d <= '9')
c.append(b[(int)d-(int)('0')]);
else
c.append( b[(int) d - (int) ('A') + 10]);
}
return c.toString();
}
static String toOctal(String a) {
int len = a.length();
int k;
StringBuffer b = new StringBuffer();
if (a.substring(0, 3).equals("000")) {//看看前三位是不是0,是零就从第四位开始截取
k=3;
} else {
k=0;
}
for(int i=k;i<len-2;i+=3){
switch (a.substring(i,i+3)){
case "000":b.append("0");break;
case "001":b.append("1");break;
case "010":b.append("2");break;
case "011":b.append("3");break;
case "100":b.append("4");break;
case "101":b.append("5");break;
case "110":b.append("6");break;
case "111":b.append("7");break;
default:
break;
}
}
return b.toString();
}
}
数列排序
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9
解题思路:
这个排序用循环使用冒泡选择等排序都行,我这用的冒泡,最简单
import java.util.*;
public class Main {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] a=new int[n];
int m=0,c,t;
for(int i=0;i<n;i++)
a[i] = sc.nextInt();
for(int i=0;i<n;i++)
for(int j=i;j<n;j++){
if(a[i]>a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(int i=0;i<n;i++)
System.out.print(a[i]+" ");
}
}