华为上机题-二师弟的星际加法
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