分享错误,学习生活

2-62之间的进制转换

  1. //2-62之间的进制转换,用[0-9a-zA-Z]表示数字
  2. import java.util.Scanner;
  3. public class Main {
  4. public int charToInt(char c) {
  5. if (c >= '0' && c <= '9') {
  6. return c - '0';
  7. } else if (c >= 'a' && c <= 'z') {
  8. return c - 'a' + 10;
  9. } else if (c >= 'A' && c <= 'Z') {
  10. return c - 'A' + 36;
  11. }
  12. return 0;
  13. }//charToInt
  14. public char intToChar(int i) {
  15. char[] c = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  16. 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
  17. 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
  18. 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
  19. 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
  20. return c[i];
  21. }//intToChar
  22. public String convert(int sReg, int dReg, String sStr) {
  23. if (sStr.equals()) {
  24. return ;
  25. }
  26. //判断是否是负数
  27. boolean negativeFlag = false;
  28. if (sStr.startsWith()) {
  29. sStr = sStr.substring(1, sStr.length());
  30. negativeFlag = true;
  31. }
  32. char[] sChar = sStr.toCharArray();
  33. int n = sStr.length();
  34. int decimalInt = 0;
  35. String dStr = ;
  36. //先转换为十进制
  37. for (int i = 0; i < n; i++) {
  38. decimalInt += charToInt(sChar[i]) * Math.pow(sReg, n - i - 1);
  39. }
  40. while (decimalInt != 0) {
  41. dStr = intToChar(decimalInt % dReg) + dStr;
  42. decimalInt = decimalInt / dReg;
  43. }
  44. //如果是负数
  45. if (negativeFlag == true) {
  46. return + dStr;
  47. }
  48. return dStr;
  49. }//convert
  50. public static void main(String[] args) {
  51. Scanner sc = new Scanner(System.in);
  52. int sReg = sc.nextInt();
  53. int dReg = sc.nextInt();
  54. String sStr = sc.nextLine().trim();
  55. System.out.println(new Main().convert(sReg, dReg, sStr));
  56. }
  57. }
  58. //输入:
  59. //源进制 目标进制 源数
  60. //
  61. //输出:
  62. //目标数
  63. //8 16 1234
  64. //29c

暂无评论

发表评论

电子邮件地址不会被公开。