POJ 1220 (两种任意进制之间的转换(大数),java的BigInteger)

迷南。 2022-09-17 12:23 141阅读 0赞

http://poj.org/problem?id=1220

N进制 向 M进制 转换,

  1. 先将N进制 转换成10进制;

2.将结果逐次对M取余;

一开始用BigDecimal,没办法取余;参考大神的,用BigInteger

  1. package com.zyh.hdu;
  2. import java.math.BigInteger;
  3. import java.util.Scanner;
  4. public class Poj1220 {
  5. public static void main(String[] args) {
  6. Scanner cin = new Scanner(System.in);
  7. int t = cin.nextInt();
  8. while(t-- != 0){
  9. int a = cin.nextInt();
  10. int b = cin.nextInt();
  11. String aa = cin.next();
  12. System.out.println(a+" "+aa);
  13. System.out.print(b+" ");
  14. BigInteger sum = BigInteger.ZERO;
  15. for(int i=0; i<aa.length();i++){
  16. sum = sum.multiply(BigInteger.valueOf(a)).add(BigInteger.valueOf(getnum(aa.charAt(i))));
  17. }
  18. //System.out.println(sum);
  19. String bb = "";
  20. while(!sum.equals(BigInteger.ZERO)){
  21. bb = retchar(sum.mod(BigInteger.valueOf(b)).intValue()) + bb;
  22. sum = sum.divide(BigInteger.valueOf(b));
  23. }
  24. if(bb.equals("")) bb="0";
  25. System.out.println(bb);
  26. System.out.println();
  27. }
  28. }
  29. static int getnum(char m){
  30. if(m>='0' && m<='9') return m - '0';
  31. else if(m>='A' && m<='Z') return m-'A'+10;
  32. else return m-'a'+36;
  33. }
  34. static char retchar(int i){
  35. if(i<=9) return (char) (i + '0');
  36. else if(i>=10 && i<=35) return (char)(i -10+'A');
  37. else return (char)(i-36+'a');
  38. }
  39. }
  40. /*
  41. *
  42. *
  43. *
  44. Sample Input
  45. 8
  46. 62 2 abcdefghiz
  47. 10 16 1234567890123456789012345678901234567890
  48. 16 35 3A0C92075C0DBF3B8ACBC5F96CE3F0AD2
  49. 35 23 333YMHOUE8JPLT7OX6K9FYCQ8A
  50. 23 49 946B9AA02MI37E3D3MMJ4G7BL2F05
  51. 49 61 1VbDkSIMJL3JjRgAdlUfcaWj
  52. 61 5 dl9MDSWqwHjDnToKcsWE1S
  53. 5 10 42104444441001414401221302402201233340311104212022133030
  54. Sample Output
  55. 62 abcdefghiz
  56. 2 11011100000100010111110010010110011111001001100011010010001
  57. 10 1234567890123456789012345678901234567890
  58. 16 3A0C92075C0DBF3B8ACBC5F96CE3F0AD2
  59. 16 3A0C92075C0DBF3B8ACBC5F96CE3F0AD2
  60. 35 333YMHOUE8JPLT7OX6K9FYCQ8A
  61. 35 333YMHOUE8JPLT7OX6K9FYCQ8A
  62. 23 946B9AA02MI37E3D3MMJ4G7BL2F05
  63. 23 946B9AA02MI37E3D3MMJ4G7BL2F05
  64. 49 1VbDkSIMJL3JjRgAdlUfcaWj
  65. 49 1VbDkSIMJL3JjRgAdlUfcaWj
  66. 61 dl9MDSWqwHjDnToKcsWE1S
  67. 61 dl9MDSWqwHjDnToKcsWE1S
  68. 5 42104444441001414401221302402201233340311104212022133030
  69. 5 42104444441001414401221302402201233340311104212022133030
  70. 10 1234567890123456789012345678901234567890
  71. */

发表评论

表情:
评论列表 (有 0 条评论,141人围观)

还没有评论,来说两句吧...

相关阅读

    相关 大数转换

    一般的数字进制转换大家都很熟悉,先转换为十进制数字,再进行 除 n 取余,这种情况适用于操作数不大的情况(不大于最大的基本数据类型(long long)),但是如果操