问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
import java.util.Scanner;
public class Main {
public static void f(String s) {
int n=0;
long b;
long sum=0;
for(int i=s.length()-1;i>=0;i--) {
char a=s.charAt(i);
if(a=='A'||a=='B'||a=='C'||a=='D'||a=='E'||a=='F') {
b=a-'0'-7;
}else
b=a-'0';
// b=b*16; //错误,若不用for循环,b每次都是全新的数,相当于每次都是*16的1次方
// sum=sum+b;
for(int j=0;j<n;j++) {
b=b*16;
}
sum=sum+b;
n++;
}
System.out.println(sum);
}
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
String s=input.next();
f(s);
}
}
注意定义为长整型,否则错误。
思路: 十六进制转十进制分两部分,字符型和整型。字符型的要先转化为整型才能去转十进制。
在转10进制的时候想的复杂了,不知道如何去写第一个*16的0次方,应该用for循环控制,且n一直加1.