2057A + B Again

这个十六进制想了很久的,就是把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;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值