赞
踩
ps:本来以为这题一般,最后看到输入数据后,发现还得从最基础做起。
发现的问题:
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]);
- }
- }
-
- }
- }

- 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耗时太长了。下面是几组测试输入和输出值:
大数测试输入:
大数测试输出:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。