题源 👉 进制转换_牛客题霸_牛客网 (nowcoder.com)
题目描述:
思路:
方法一:
从 0x 后开始对每位字符转换为对应十进制数值,再由进制转换公式:16进制的 j 位上的数 t 转为十进制值为 16 j - 1 * t 。把16进制每位表示的十进制值相加即可。
方法二:
直接使用BigInteger转
具体实现:
方法一:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String t16 = sc.next();
int ans = 0;
for(int i = 2; i < t16.length(); i++){ // 从 0x后开始
char c = t16.charAt(i);
int t = 0; // i位上的字符对应的十进制值
if(c >= '0' && c <= '9') t = c - '0';
else if(c >= 'a' && c <= 'f') t = c - 'a' + 10;
else if(c >= 'A' && c <= 'F') t = c - 'A' + 10;
ans += t *Math.pow(16, t16.length() - i - 1);
}
System.out.println(ans);
}
}
方法二:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder(sc.next());
String ans = new BigInteger(sb.substring(2), 16).toString(10);
System.out.println(ans);
}
}
时间复杂度:
O(n)