ps:本来以为这题一般,最后看到输入数据后,发现还得从最基础做起。
发现的问题:
- int最大长度限制 max=2147483647 int min=-2147483648(如果直接用十六进制转十进制,再转八进制会遇到最大长度限制)
- char类型转int类型,会直接转成ACLL码中的数,所以得先转换成string类型在转换成int类型。
一、在int范围之内的转换
10进制转化其他进制 | 对应的方法,参数:n(原10进制数据),r(进制) | 返回值 |
10进制转2进制 | Integer.toBinaryString(n); | 一个二进制字符串 |
10进制转8进制 | Integer.toOctalString(n); | 一个八进制字符串 |
10进制转16进制 | Integer.toHexString(n); | 一个16进制字符串 |
10进制转 r 进制 | nteger.toString(100, 16); | 一个r进制字符串 |
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//获得输入16进制数的个数
int count = sc.nextInt();
if (count >= 1 && count <= 10) {
//创建一个数组
int[] arr = new int[count];
//对每一个数进行操作
for (int i = 0; i < count; i++) {
//获得输入的16进制数字符串
String strnum = sc.next();
//转换为16进制
Integer hexnum = Integer.valueOf(strnum, 16);
//转换为8进制字符串
String num = Integer.toOctalString(hexnum);
//转换为Int类型
int result = Integer.parseInt(num);
//存入数组
arr[i] = result;
}
//遍历数组输出
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
}
二、不在int范围之内的转换
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String regex="^[A-Za-z0-9]+$";
if(n>=1&&n<=10){
String[] str=new String[n];
for (int i=0;i<n;i++){
str[i]=sc.next();
if(!str[i].matches(regex)){
break;
}
}
//十六进制转八进制
//1.先转二进制(四位)
//2.再转八进制(三位)
for (int i=0;i<n;i++){
char[] ch1=str[i].toCharArray();
String strAll="";
//十六进制转化为二进制
for(int j=0;j<str[i].length();j++){
int y1=Integer.valueOf(String.valueOf(ch1[j]),16);
//转化成二进制8 4 2 1
int x1=y1/8;
int x2=(y1-x1*8)/4;
int x3=(y1-x1*8-x2*4)/2;
int x4=y1-x1*8-x2*4-x3*2;
String str2= x1 +String.valueOf(x2)+ x3 + x4;
strAll=strAll+str2;
}
str[i]=new StringBuffer(strAll).reverse().toString();
//二进制转化为八进制 4 2 1
char[] ch2=str[i].toCharArray();
String str8="";
int sum=0;
for (int j=0;j<str[i].length();j++){
int y1=Integer.parseInt(String.valueOf(ch2[j]));
if((j+1)%3==0){
int x1=y1*4;
sum=sum+x1;
str8=str8+ sum;
sum=0;
}
if((j+1)%3==1){
int x2=y1;
sum=sum+x2;
if(j+1==str[i].length()){
str8=str8+ sum;
}
}
if((j+1)%3==2){
int x3=y1*2;
sum=sum+x3;
if(j+1==str[i].length()){
str8=str8+ sum;
}
}
}
String End=new StringBuffer(str8).reverse().toString();
End = End.replaceFirst("^0*", "");
System.out.println(End);
}
}
}
}
ps:这种方法虽然都可以跑,但是CPU耗时太长了。下面是几组测试输入和输出值:
大数测试输入:
- 248B87D6AE33F9A
- 62D7183A5D5789E4B2D6
- B441E2411DC709E111C7E1E7ACB6F8CAC0BB2FC4C8BC2AE3BAAAB9165CC458E199CB89F51B135F7091A5ABB0874DF3E8CB45
- 43A5EB93B0441E9CA4C2B0FB3D30875CBF29ABD5B1ACF38984B35AE882809DD4CFE7ABC5C61BAA52E053B4C3643F204EF259D2E98042A948AAC5E884CB3EC7DB925643FD34FDD467E2CCA406035CB2744CB90A63E51C9737903343947E02086541E4C48A99630AA9AECE153843A4B190274EBC955F8592E30A2205A485846248987550AAF2094EC59E7931DC650C7451CC61C0CB2C46A1B3F2C349FAFF763C7F8D14DDFF946351744378D62C59285A8D7915614F5A2AC9E0D68ACA6248A9227AB8F1930EE38AC7A9D239C9B026A481E49D53161F9A9513FE5271C32E9C21D156EB9F1BEA57F6AE4F1B1DE3B7FD9CEE2D9CCA7B4C242D26C31D000B7F90B7FE48A131C7DEBFBE58165266DE56E1EDF26939AF07EC69AB1B17D8DB62143F2228B51551C3D2C7DE3F5072BD4D18C3AEB64CB9E8CBA838667B6ED2B2FCAB04ABAE8676E318B402A7D15B30D2D7DDB78650CC6AF82BC3D7AA805B02DD9AA523B7374A1323EE6B516D1B81E5F709C2C790EDAF1C3FA9B0A1DBC6DABC2B5ED267244C458752002B106D6381FAD58A7E193657BDE0FE029120F8379316891F828B8D24A049E5B86D855BCFED56765F9DA1AC54CAEAF9257ABC67B451BC70B0E52817DD1B704A6B418A83FD4A9CA4C89E1A6E779F8D9E9DF18747591E5B314C05763EDCD59632423CA83F14D6F073D784DB2B7001643A6760
大数测试输出:
- 11105607655270637632
- 142656140722725361171131326
- 13210170440435616047410434374171726266761453005662770462136052707352525621313461054341463456117521542327670221513256604164676372145505
- 4164572711660210172345114126076636460416562771232572554326363423022632656420240116724637636536134303352451340247323033103744023571131645646002052451052542750411454766175562225441775151767243176131451003003271311642313441230762434456336201464162437401010312407446110523130605251535470251604164454310047235362252770262270605042013222054106111046072520525710112354263636230734312061642434614160145454215206637454151176577566170776150515677745061521350415706542613112055215362125412365505262360326425451422212444236534361446073434254365164434711540232444036223524613037465124237745116160627234103505267271743372453766534474330736166777316356133163123664604413223303072000133771026777444241143437365773713005451146674533417337115116327407730646530661373066661024176210505521252160751307674375203453651506141656554462717214565016063173335512627712540452727206355614305500124764255460645537355570312063065370127417275250013300556632512216671564502310767153242664334036276702341307441666570703765154120733615552741265732231622114213035220002542033261601765526123741446625736740774012211017406744613211077012134322224022362670333025336376652635457635503261246256537111275274317321215707026071224027672155602246550142501775225162446211703233473637433172357430350726217133142460053543733465313062204362501761232674071727411554533400054416463540