问题:a-z表示0-25,代表26进制,现在要求把该26进制转为10进制
例如:
输入:ba
输出:26
它可以表示为:2*10^3+0*10^2+3*10^1+9*10^0
那么任何进制的数都一样,例如16进制数8A30E
它就是8*16^4+10*16^3+3*16^2+0*16^1+14*16^0=566030,算出来的值就是这个数对应的十进制数
又例如k进制数abcdef(这是一个6位数)
它就是a*k^5+b*k^4+c*k^3+d*k^2+e*k^1+f*k^0
这样想就十分简单了
一个数的每一位都有一个权值,例如十进制数2039
它可以表示为:2*10^3+0*10^2+3*10^1+9*10^0
那么任何进制的数都一样,例如16进制数8A30E
它就是8*16^4+10*16^3+3*16^2+0*16^1+14*16^0=566030,算出来的值就是这个数对应的十进制数
又例如k进制数abcdef(这是一个6位数)
它就是a*k^5+b*k^4+c*k^3+d*k^2+e*k^1+f*k^0
这样想就十分简单了
给个题目练习下:
package com.hbut.test; public class Converter { // 2:题目描述 // // 用英文字母a-z来分别表示数值0-25, 形成一个26进制的数值表示法。需要你写一个方法,将用a-z表示的26进制数值的字符串,转化为对应的10进制数值。 // 输入 // 输入数据有多组,每组占一行,包含多个a-z之间的字符。 // 样例输入 // ba // bcd // gibbon // goodboy // // 输出 // 所对应表示的10进制数。 public static Long getNum(String s){ Long sum=0L; for(int i=0;i<s.length();i++){ sum+=(long) ((s.charAt(i)-'a')*Math.pow(26,s.length()-1-i)); } return sum; } public static void main(String[] args) { System.out.println(getNum("gibbon")); } }
输出结果:74962693