华为上机题-二师弟的星际加法

华为上机题-二师弟的星际加法

1 问题描述

我是网络公司的一名普通程序员,英文名Steven,发音比较像“师弟”,自从入职培训自我介绍后,大家就称我为“二师弟”,我喜欢看科幻小说,也喜欢做梦,有一次梦到外星球,发现外星人使用的并非10进制/16进制等,有些星球居然使用N进制(据统计N都在2~35之间),现在我们将首先给您一个数字表示N进制,然后给出两个数字的字符串,请算出其求和结果并输出,如果输入不能正常计算则输出-1。

说明:
1:数字的字符串其中包括0-9和a-z(表示10-35)。
2:所有的输入和输出都只会是小写字母或数字,不存在其他字符。

运行时间限制: 无限制
内存限制: 无限制

输入:
整形数:计算进制
字符串:计算数1
字符串:计算数2

输出:
字符串:计算结果

样例输入:
10
100
100

样例输出:
200

2 我的解答
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main3 {
  public static void main(String[] args) {
     Main3 main = new Main3();
     Scanner scanner = new Scanner(System.in);
     int degit = scanner.nextInt();
     String s1 = scanner.next();
     String s2 = scanner.next();
     System.out.println(main.plus(degit, s1, s2));
  }
  public String plus(int degit,String s1,String s2)
  {
      Map<Character, Integer> hashMap1 = new HashMap<Character, Integer>();
      hashMap1.put('1', 1);hashMap1.put('2',2);hashMap1.put('3',3);hashMap1.put('4',4);
      hashMap1.put('5',5);hashMap1.put( '6',6);hashMap1.put('7',7);hashMap1.put( '8',8);
      hashMap1.put('9',9);hashMap1.put('A',10);hashMap1.put('B',11);hashMap1.put('C',12);
      hashMap1.put('D',13);hashMap1.put('E',14);hashMap1.put('F',15);hashMap1.put('0',0);
      hashMap1.put('G',16);hashMap1.put('H',17);hashMap1.put('I',18);hashMap1.put('J',19);
      hashMap1.put('K',20);hashMap1.put('L',21);hashMap1.put('M',22);hashMap1.put('N',23);
      hashMap1.put('O',24);hashMap1.put('P',25);hashMap1.put('Q',26);hashMap1.put('R',27);
      hashMap1.put('S',28);hashMap1.put('T',29);hashMap1.put('U',30);hashMap1.put('V',31);
      hashMap1.put('W',32);hashMap1.put('X',33);hashMap1.put('Y',34);hashMap1.put('Z',35);

      Map<Integer, Character> hashMap2 = new HashMap<Integer, Character>();
      hashMap2.put(1, '1');hashMap2.put(2,'2');hashMap2.put(3,'3');hashMap2.put(4,'4');
      hashMap2.put(5,'5');hashMap2.put( 6,'6');hashMap2.put(7,'7');hashMap2.put( 8,'8');
      hashMap2.put(9,'9');hashMap2.put(10,'A');hashMap2.put(11,'B');hashMap2.put(12,'C');
      hashMap2.put(13,'D');hashMap2.put(14,'E');hashMap2.put(15,'F');hashMap2.put(0,'0');
      hashMap2.put(16,'G');hashMap2.put(17,'H');hashMap2.put(18,'I');hashMap2.put(19,'J');
      hashMap2.put(20,'K');hashMap2.put(21,'L');hashMap2.put(22,'M');hashMap2.put(23,'N');
      hashMap2.put(24,'O');hashMap2.put(25,'P');hashMap2.put(26,'Q');hashMap2.put(27,'R');
      hashMap2.put(28,'S');hashMap2.put(29,'T');hashMap2.put(30,'U');hashMap2.put(31,'V');
      hashMap2.put(32,'W');hashMap2.put(33,'X');hashMap2.put(34,'Y');hashMap2.put(35,'Z');
      if(degit<2||degit>35)
      {
          //System.out.println("1t");
          return -1+"";
      }
      if(!checkValid(hashMap1,s1.toUpperCase(),degit)||!checkValid(hashMap1,s2.toUpperCase(),degit))
      {
          //System.out.println("2t");
          return -1+"";
      }
      char[] tmparr = s1.toUpperCase().toCharArray(); 
      char[] tmparr1 = s2.toUpperCase().toCharArray();
      int length = tmparr.length;       int length1 = tmparr1.length;
      char[] arr = new char[length];    char[] arr1 = new char[length1];
      for(int i=0;i<arr.length;i++)
      {
          arr[i] = tmparr[length-1-i];
      }  
      //System.out.println(arr);
      for(int i=0;i<arr1.length;i++)
      {
          arr1[i] = tmparr1[length1-1-i];
      } 
      //System.out.println(arr1);

      int max = length>length1?length:length1;
      char[] recArr = new char[max+1];
      int index = 0;
      int recplus = 0;
      while(index<length&&index<length1)
      {
          int tmp = hashMap1.get(arr[index]); 
          int tmp1 = hashMap1.get(arr1[index]);
          int res = tmp+tmp1+recplus;
          //System.out.println(res);
          recArr[index] = hashMap2.get(res%degit);
          recplus = res/degit;
          index++;

      }
      while(index<length)
      {
          int res = hashMap1.get(arr[index])+recplus;
          recArr[index] = hashMap2.get(res%degit);
          recplus = res/degit;
          index++;
      }
      while(index<length1)
      {
          int res = hashMap1.get(arr1[index])+recplus; 
          recArr[index] = hashMap2.get(res%degit);
          recplus = res/degit;
          index++;
      }
      if(recplus>0)
      {
          recArr[index] = hashMap2.get(recplus); 
      }else{
          recArr[index] = '$';
      }
      StringBuffer buffer = new StringBuffer();
      for(int i=recArr.length-1;i>=0;i--)
      {
          if(recArr[i]!='$')
          {
              buffer.append(recArr[i]);
          }
      }
      return buffer.toString().toLowerCase();
  }
  public static boolean checkValid(Map<Character,Integer> hmap,String str,int degit)
  {
      boolean flag = true;
      char[] charArr = str.toCharArray();
      for(int i=0;i<charArr.length;i++)
      {
          if(hmap.get(charArr[i])>=degit)
          {
              flag = false;
          }
      }
      return flag;
  }
} 
3 阅读须知
  • 本文代码仅供参考,不喜勿喷
  • 有何问题,可以在评论中指出
  • 任何copy本案例,产生严重后果,本人概不负责
  • 本代码AC所有case
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值