求助,36进制的计算方法

留校_察看 2019-01-16 03:47:06

String temp = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//字符串顺序
String key = "1001D31000000001KDYQ";//共20位

怎么将key最后一位加1得到R,如果是Z则进位运算。
...全文
610 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
留校_察看 2019-01-18
  • 打赏
  • 举报
回复
引用 1 楼 LCL_data 的回复:
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
->
对应 10机制的 0到35


String key = "1001D31000000001KDYQ";

Q对应26,26+1就是27,27对应的就是R。
Z对应的35,35+1就是36,36超出的我们的范围,那就36%36=0,但是需要进1位,然后Z前面的那位处理进位,方式和上面的方式是一样的

感谢,不过20位的英文字符得用biginteger来实现,已经可以了。谢谢。附上修改过的。
package demo;
import java.math.BigInteger;
import java.util.HashMap;

public class Ten2Thirty {

private static final String X36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String[] X36_ARRAY = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z".split(",");

public static String tenTo36(BigInteger num) {
StringBuffer sBuffer = new StringBuffer();

if(num.compareTo(new BigInteger("0")) < 0) {
sBuffer.append("0");
}
while(num.compareTo(new BigInteger("0")) > 0) {
BigInteger[] arr=num.divideAndRemainder(new BigInteger("36"));
sBuffer.append(X36_ARRAY[Integer.parseInt(String.valueOf(arr[1]))]);
num = num.divide(new BigInteger("36"));
}
return sBuffer.reverse().toString();
}

public static BigInteger thirtysixToTen(String string) {

HashMap<Character, Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < X36.length(); i++) {
map.put(X36.charAt(i), i);
}

int size = string.length();
BigInteger num = new BigInteger("0");
for(int i = 0; i<size; i++) {
String char2str = String.valueOf(string.charAt(i)).toUpperCase();
BigInteger pow = new BigInteger("36").pow(size - i - 1);
BigInteger getmap = new BigInteger(map.get(char2str.charAt(0))+"");
num = num.add(pow.multiply(getmap));
}
return num;
}

public static void main(String[] args) {
BigInteger ten = thirtysixToTen("FMT0Z000000000000000");
ten = ten.add(new BigInteger("1"));
System.out.println(tenTo36(ten));
}
}
十八道胡同 2019-01-16
  • 打赏
  • 举报
回复
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
->
对应 10机制的 0到35


String key = "1001D31000000001KDYQ";

Q对应26,26+1就是27,27对应的就是R。
Z对应的35,35+1就是36,36超出的我们的范围,那就36%36=0,但是需要进1位,然后Z前面的那位处理进位,方式和上面的方式是一样的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧