A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

当初,由于要求的输入数据比较大,长度超过了long的范围,因此我用了BigInteger,但这样效率好低,题目要求输入100000位。
怎么改进呢???

import java.math.BigInteger;
import java.util.Scanner;
public class sixteentoeight {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int i;
        String num[]=new String[n];
        for(i=0;i<n;i++)
            num[i]=sc.next();
        BigInteger result[]=new BigInteger[n];
        for(i=0;i<n;i++)
            result[i]=new BigInteger(num[i],16);
        for(i=0;i<n;i++)
            System.out.println(result[i].toString(8));
    }
}


评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 syw02014 于 2014-3-12 09:59 编辑

这个有点麻烦。功能给你扩展一下,任意进制(进制是2到62进制之间)的数互转 我给你的这个程序可以输入输出1000000位,(程序中可能出现字母的意思: A = 10, B = 11, ..., Z = 35, a = 36, b = 37, ..., z = 61 )我想应该够你用的:
  1. /*
  2. 该程序的功能:
  3. 任意进制的数互转(进制:2-62);
  4. 首先输入该程序循环的次数T,再输入输入数的进制n,最后要转换的数s;(可根据程序提示输入)
  5. */
  6. import java.util.*;
  7. import java.io.*;
  8. import java.math.*;

  9. public class Main
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 int i,j;
  14.                 Scanner cin = new Scanner(System.in);
  15.                 System.out.println("该程序循环的次数:");
  16.                 int T = cin.nextInt(); //T是该程序循环的次数
  17.                 while((T--)!=0)
  18.                 {
  19.                         System.out.println("输入数的进制:");
  20.                         int n = cin.nextInt(); //n:输入数的进制
  21.                         
  22.                         System.out.println("要转换的进制:");
  23.                         int m = cin.nextInt(); //m:要转换的进制
  24.                         
  25.                         System.out.println(n+"要转换的"+m+"进制的数:");
  26.                         String s = cin.next(); //s:要转换的数
  27.                         
  28.                         int l = s.length();
  29.                         BigInteger sum = BigInteger.valueOf(0);
  30.                         for(i=0;i<l;i++)
  31.                         {
  32.                                 sum=sum.multiply(BigInteger.valueOf(n));
  33.                                 sum=sum.add(BigInteger.valueOf(v(s.charAt(i))));
  34.                         }
  35.                         
  36.                         i=0;
  37.                         int a[] = new int[1000000];
  38.                         while(sum.compareTo(BigInteger.valueOf(0))!=0)
  39.                         {
  40.                                 a[i]=sum.mod(BigInteger.valueOf(m)).intValue();
  41.                                 sum=sum.divide(BigInteger.valueOf(m));
  42.                                 i++;
  43.                         }
  44.                         
  45.                         System.out.println(n+"进制要转换"+m+"进制的数:"+s);
  46.                         System.out.print(n+"进制要转换"+m+"进制的数的结果:");
  47.                         
  48.                         for(j=i-1;j>=0;j--)
  49.                         {
  50.                                 if(a[j]>=0&&a[j]<=9)
  51.                                         System.out.print(a[j]);
  52.                                 else if(a[j]>=10&&a[j]<=35)
  53.                                         System.out.print((char)(a[j]-10+'A'));
  54.                                 else if(a[j]>=36&&a[j]<=61)
  55.                                         System.out.print((char)(a[j]-36+'a'));
  56.                         }
  57.                         
  58.                         System.out.println();
  59.                         if(T!=0)
  60.                                 System.out.println();
  61.                 }
  62.         }
  63.         
  64.         private static int v(char c)
  65.         {
  66.                 if(c>='0'&&c<='9')
  67.                         return c-'0';
  68.                 else if(c>='A'&&c<='Z')
  69.                         return c-'A'+10;
  70.                 else if(c>='a'&&c<='z')
  71.                         return c-'a'+36;
  72.                 return 0;
  73.         }
  74. }
复制代码
程序测试:
该程序循环的次数:
3
输入数的进制:
16
要转换的进制:
10
16要转换的10进制的数:
3A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD2
16进制要转换10进制的数:3A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD2
16进制要转换10进制的数的结果:5189790491602597986321792601378459415876170151934523553765647853292812302618388570027833028128452303365432624187530134200724035918282659464828026132771719550795629865585330708151205798437918035656733637605072814608684326014531595556155964034625688497671791861255010744071740982754706824878485680965537885138716630442361801903575157820061983533339500618948754726522672572296227958719314050905213650

输入数的进制:
10
要转换的进制:
16
10要转换的16进制的数:
1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
10进制要转换16进制的数:1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
10进制要转换16进制的数的结果:8B4A290236025209EDB94DC1478DA0DCC39E1B4D1B546E5961188994FAEA6931E04E0378629248B7282A5E6064A2AE80A67A83DC209F5BB42058208D441AA019FE2F4DB9E90CBCD6CE0045AD5139317F3ED5E5E7EB001B51E3B725A501C2A01788A9935E243D1161EF7BF14BACCFF196CE3F0AD2

输入数的进制:
16
要转换的进制:
8
16要转换的8进制的数:
3A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD2
16进制要转换8进制的数:3A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD23A0C92075C0DBF3B8ACBC5F96CE3F0AD2
16进制要转换8进制的数的结果:164062220165601557635612627427713316176053221640622201656015576356126274277133161760532216406222016560155763561262742771331617605322164062220165601557635612627427713316176053221640622201656015576356126274277133161760532216406222016560155763561262742771331617605322

希望能帮到你!!!


评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
syw02014 发表于 2014-3-12 09:57
这个有点麻烦。功能给你扩展一下,任意进制(进制是2到62进制之间)的数互转 我给你的这个程序 ...

恩,好的。
谢谢哈!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马