当前位置:   article > 正文

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

进制转换蓝桥杯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进制字符串
  1. import java.util.Scanner;
  2. public class Main {
  3. public static void main(String[] args) {
  4. Scanner sc = new Scanner(System.in);
  5. //获得输入16进制数的个数
  6. int count = sc.nextInt();
  7. if (count >= 1 && count <= 10) {
  8. //创建一个数组
  9. int[] arr = new int[count];
  10. //对每一个数进行操作
  11. for (int i = 0; i < count; i++) {
  12. //获得输入的16进制数字符串
  13. String strnum = sc.next();
  14. //转换为16进制
  15. Integer hexnum = Integer.valueOf(strnum, 16);
  16. //转换为8进制字符串
  17. String num = Integer.toOctalString(hexnum);
  18. //转换为Int类型
  19. int result = Integer.parseInt(num);
  20. //存入数组
  21. arr[i] = result;
  22. }
  23. //遍历数组输出
  24. for (int i = 0; i < arr.length; i++) {
  25. System.out.println(arr[i]);
  26. }
  27. }
  28. }
  29. }

二、不在int范围之内的转换

  1. import java.util.Scanner;
  2. public class Demo1 {
  3. public static void main(String[] args) {
  4. Scanner sc=new Scanner(System.in);
  5. int n=sc.nextInt();
  6. String regex="^[A-Za-z0-9]+$";
  7. if(n>=1&&n<=10){
  8. String[] str=new String[n];
  9. for (int i=0;i<n;i++){
  10. str[i]=sc.next();
  11. if(!str[i].matches(regex)){
  12. break;
  13. }
  14. }
  15. //十六进制转八进制
  16. //1.先转二进制(四位)
  17. //2.再转八进制(三位)
  18. for (int i=0;i<n;i++){
  19. char[] ch1=str[i].toCharArray();
  20. String strAll="";
  21. //十六进制转化为二进制
  22. for(int j=0;j<str[i].length();j++){
  23. int y1=Integer.valueOf(String.valueOf(ch1[j]),16);
  24. //转化成二进制8 4 2 1
  25. int x1=y1/8;
  26. int x2=(y1-x1*8)/4;
  27. int x3=(y1-x1*8-x2*4)/2;
  28. int x4=y1-x1*8-x2*4-x3*2;
  29. String str2= x1 +String.valueOf(x2)+ x3 + x4;
  30. strAll=strAll+str2;
  31. }
  32. str[i]=new StringBuffer(strAll).reverse().toString();
  33. //二进制转化为八进制 4 2 1
  34. char[] ch2=str[i].toCharArray();
  35. String str8="";
  36. int sum=0;
  37. for (int j=0;j<str[i].length();j++){
  38. int y1=Integer.parseInt(String.valueOf(ch2[j]));
  39. if((j+1)%3==0){
  40. int x1=y1*4;
  41. sum=sum+x1;
  42. str8=str8+ sum;
  43. sum=0;
  44. }
  45. if((j+1)%3==1){
  46. int x2=y1;
  47. sum=sum+x2;
  48. if(j+1==str[i].length()){
  49. str8=str8+ sum;
  50. }
  51. }
  52. if((j+1)%3==2){
  53. int x3=y1*2;
  54. sum=sum+x3;
  55. if(j+1==str[i].length()){
  56. str8=str8+ sum;
  57. }
  58. }
  59. }
  60. String End=new StringBuffer(str8).reverse().toString();
  61. End = End.replaceFirst("^0*", "");
  62. System.out.println(End);
  63. }
  64. }
  65. }
  66. }

ps:这种方法虽然都可以跑,但是CPU耗时太长了。下面是几组测试输入和输出值:

大数测试输入:

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

大数测试输出:

  1. 11105607655270637632
  2. 142656140722725361171131326
  3. 13210170440435616047410434374171726266761453005662770462136052707352525621313461054341463456117521542327670221513256604164676372145505
  4. 4164572711660210172345114126076636460416562771232572554326363423022632656420240116724637636536134303352451340247323033103744023571131645646002052451052542750411454766175562225441775151767243176131451003003271311642313441230762434456336201464162437401010312407446110523130605251535470251604164454310047235362252770262270605042013222054106111046072520525710112354263636230734312061642434614160145454215206637454151176577566170776150515677745061521350415706542613112055215362125412365505262360326425451422212444236534361446073434254365164434711540232444036223524613037465124237745116160627234103505267271743372453766534474330736166777316356133163123664604413223303072000133771026777444241143437365773713005451146674533417337115116327407730646530661373066661024176210505521252160751307674375203453651506141656554462717214565016063173335512627712540452727206355614305500124764255460645537355570312063065370127417275250013300556632512216671564502310767153242664334036276702341307441666570703765154120733615552741265732231622114213035220002542033261601765526123741446625736740774012211017406744613211077012134322224022362670333025336376652635457635503261246256537111275274317321215707026071224027672155602246550142501775225162446211703233473637433172357430350726217133142460053543733465313062204362501761232674071727411554533400054416463540
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/226709
推荐阅读
相关标签
  

闽ICP备14008679号