1.十进制和十六进制的转换
举例子:十六进制:0X10 对应的十进制:1*16^1+0*16^0
Java实现:写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
具体代码,第一版:
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
while(in.hasNext())
{
String str = in.next();
int m = 0;
int length = str.length();
for(int i=length-1;i>=2;i--)
{
char ch = str.charAt(i);
if(ch=='A')
m += 10*(Math.pow(16,length-1-i));
else if(ch=='B')
m += 11*(Math.pow(16,length-1-i));
else if(ch=='C')
m += 12*(Math.pow(16,length-1-i));
else if(ch=='D')
m += 13*(Math.pow(16,length-1-i));
else if(ch=='E')
m += 14*(Math.pow(16,length-1-i));
else if(ch=='F')
m += 15*(Math.pow(16,length-1-i));
else
m += (ch-'0')*(Math.pow(16,length-1-i));//减去'0',将字符转成整数
}
System.out.println(m);
}
}
}
几点小结:
1)在Java中求a的b次方,使用函数Math.pow(a,b);
2)将字符转成数字,使用'a'-'0',原因很简单,'0'对应着十进制的48,'1'对应这十进制的49,,,,'9'对应着十进制的57,将它们同时减去'0'(减去48),将将字符转成了整数。java没有将字符直接转数字的函数,所以要先将字符转成字符串,再调用函数将字符串转成对应的数字,很麻烦,Integer.parseInt(new String("1")),Integer.parseInt(String.valueOf('1'))。
对该函数的改进:如上代码中所示,对于大于'A'小于'F'时,都是单独做出判断,可不可以一起考虑呢?查找ASCII码后发现
将'A'到'F'减去55,刚好对应它所代表的十六进制所对应的十进制的值。
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
while(in.hasNext())
{
String str = in.next();
int m = 0;
int length = str.length();
for(int i=length-1;i>=2;i--)
{
char ch = str.charAt(i);
if(ch>='A'&&ch<='F')
m += (ch-55)*(Math.pow(16,length-1-i));//ch-55等于所对应的十进制的值
else
m += (ch-'0')*(Math.pow(16,length-1-i));//减去'0',将字符转成整数
}
System.out.println(m);
}
}
}
上面是通过charAt函数,数个从字符串中取出作为字符,还可以使用函数将字符串转成字符数组。
char ch[]=str.toCharArray();