这个十六进制想了很久的,就是把string变成十进制的数,算出两数相加的结果,结果又弄成string形式,看起来是十六进制。提交错了是因为只有int型,这个数开long就AC了。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char ch[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
while(scanner.hasNext()){
long b;
String alt=""; boolean isF = false;
String s1 = scanner.next();
String s2 = scanner.next();
long a =ret(s1)+ret(s2);
b=a;
if(a<0){
a=-a;
isF=true;
}
while(a>0){
alt =
ch[(int) (a)] + alt;
a=a/16;
}
if(isF&&b!=0){
System.out.println("-"+alt);}
else if(!isF&&b!=0){
System.out.println(alt);}
if(b==0){
System.out.println("0");
}
}
}
private static long ret(String c) {
long a=0; //最后一位开始 16的0次方
long b=1;
//数乘以16的b次方
if(c.charAt(c.length()-1)>='A' && c.charAt(c.length()-1)<'G'){ //需要减
与数组相似
a=(int )c.charAt(c.length()-1)-55;
}else if(c.charAt(c.length()-1)>='a'){
a=(int )c.charAt(c.length()-1)-87;
}
else if(c.charAt(c.length()-1)>'0'&&c.charAt(c.length()-1)<='9'){
a=(int)c.charAt(c.length()-1)-48;
}
for(int i=c.length()-2;i>=0;i--){//从后往前算 倒数第二位是16的一次方乘以这个数字
if(c.charAt(i)=='-'){
a= -a;
}
else if(c.charAt(i)=='+'){
a =a;
}else{
b*=16;
if(c.charAt(i)>='A'&& c.charAt(i)<'G'){
a+=((int )c.charAt(i)-55)*b;
}else if(c.charAt(i)>='a'){
a+=((int )c.charAt(i)-87)*b;
}else{
// a+=((int)c.charAt(i))*b;System.out.println("1111"+a);
强转是求字符1的ascii码,变成49了
a+=(c.charAt(i)-48)*b;
}
}
}
return a;
}
}