蓝桥杯Java---基本进制转换

ps:本来以为这题一般,最后看到输入数据后,发现还得从最基础做起。

发现的问题:

  1. int最大长度限制 max=2147483647 int min=-2147483648(如果直接用十六进制转十进制,再转八进制会遇到最大长度限制)
  2. 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耗时太长了。下面是几组测试输入和输出值:

大数测试输入:

  1. 248B87D6AE33F9A
  2. 62D7183A5D5789E4B2D6
  3. B441E2411DC709E111C7E1E7ACB6F8CAC0BB2FC4C8BC2AE3BAAAB9165CC458E199CB89F51B135F7091A5ABB0874DF3E8CB45
  4. 43A5EB93B0441E9CA4C2B0FB3D30875CBF29ABD5B1ACF38984B35AE882809DD4CFE7ABC5C61BAA52E053B4C3643F204EF259D2E98042A948AAC5E884CB3EC7DB925643FD34FDD467E2CCA406035CB2744CB90A63E51C9737903343947E02086541E4C48A99630AA9AECE153843A4B190274EBC955F8592E30A2205A485846248987550AAF2094EC59E7931DC650C7451CC61C0CB2C46A1B3F2C349FAFF763C7F8D14DDFF946351744378D62C59285A8D7915614F5A2AC9E0D68ACA6248A9227AB8F1930EE38AC7A9D239C9B026A481E49D53161F9A9513FE5271C32E9C21D156EB9F1BEA57F6AE4F1B1DE3B7FD9CEE2D9CCA7B4C242D26C31D000B7F90B7FE48A131C7DEBFBE58165266DE56E1EDF26939AF07EC69AB1B17D8DB62143F2228B51551C3D2C7DE3F5072BD4D18C3AEB64CB9E8CBA838667B6ED2B2FCAB04ABAE8676E318B402A7D15B30D2D7DDB78650CC6AF82BC3D7AA805B02DD9AA523B7374A1323EE6B516D1B81E5F709C2C790EDAF1C3FA9B0A1DBC6DABC2B5ED267244C458752002B106D6381FAD58A7E193657BDE0FE029120F8379316891F828B8D24A049E5B86D855BCFED56765F9DA1AC54CAEAF9257ABC67B451BC70B0E52817DD1B704A6B418A83FD4A9CA4C89E1A6E779F8D9E9DF18747591E5B314C05763EDCD59632423CA83F14D6F073D784DB2B7001643A6760

大数测试输出:

  1. 11105607655270637632
  2. 142656140722725361171131326
  3. 13210170440435616047410434374171726266761453005662770462136052707352525621313461054341463456117521542327670221513256604164676372145505
  4. 4164572711660210172345114126076636460416562771232572554326363423022632656420240116724637636536134303352451340247323033103744023571131645646002052451052542750411454766175562225441775151767243176131451003003271311642313441230762434456336201464162437401010312407446110523130605251535470251604164454310047235362252770262270605042013222054106111046072520525710112354263636230734312061642434614160145454215206637454151176577566170776150515677745061521350415706542613112055215362125412365505262360326425451422212444236534361446073434254365164434711540232444036223524613037465124237745116160627234103505267271743372453766534474330736166777316356133163123664604413223303072000133771026777444241143437365773713005451146674533417337115116327407730646530661373066661024176210505521252160751307674375203453651506141656554462717214565016063173335512627712540452727206355614305500124764255460645537355570312063065370127417275250013300556632512216671564502310767153242664334036276702341307441666570703765154120733615552741265732231622114213035220002542033261601765526123741446625736740774012211017406744613211077012134322224022362670333025336376652635457635503261246256537111275274317321215707026071224027672155602246550142501775225162446211703233473637433172357430350726217133142460053543733465313062204362501761232674071727411554533400054416463540
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记录菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值