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

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

输入:

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

代码如下:

 import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner; public class Main { public static void main(String[] args){
Map<String, Integer> string2IntegerMap=new HashMap();
ArrayList<String> keys=new ArrayList();
Integer tempValue=10;
char initChar='a';
for (int i = 0; i <=9; i++) {
keys.add(String.valueOf(i));
}
//keys.add(String.valueOf(initChar));
for (int i = 10; i <36; i++) {
//System.out.println(initChar);
keys.add(String.valueOf(initChar));
string2IntegerMap.put(String.valueOf(initChar), tempValue);
tempValue=tempValue+1;
initChar=(char) (initChar+1); }
for (int i = 0; i <=9; i++) {
string2IntegerMap.put(String.valueOf(i), i);
}
String ss=add(string2IntegerMap,keys);
System.out.println(ss);
}
public static String add(Map string2IntegerMap,ArrayList keys){
Scanner scanner=new Scanner(System.in);
//scanner.useDelimiter("\r\n");
int radix=scanner.nextInt();
String leftValueString=scanner.next();
String rightValueString=scanner.next();
StringBuilder sb=new StringBuilder(); int leftValueStringSize=leftValueString.length();
int rightValueStringSize=rightValueString.length();
int minSize=leftValueStringSize<rightValueStringSize?leftValueStringSize:rightValueStringSize;
int maxSize=leftValueStringSize>rightValueStringSize?leftValueStringSize:rightValueStringSize;
//int biggerFlag;
int leftValue,rightValue;
boolean carry=false;
int result;
for (int i = 0; i < minSize; i++) {
leftValue=(int) string2IntegerMap.get(String.valueOf(leftValueString.charAt(--leftValueStringSize)));
rightValue=(int) string2IntegerMap.get(String.valueOf(rightValueString.charAt(--rightValueStringSize)));
if (leftValue<radix&&rightValue<radix) {
result=leftValue+rightValue;
if (carry) {
result++;
carry=false;
}
if (result>=radix) {
carry=true;
result-=radix;
}
sb.insert(0, keys.get(result));
}
}
if ((minSize==maxSize)&&carry) {
sb.insert(0, 1);
}
int tempValue;
//carry=false;
if (leftValueStringSize>0) {
for (int i = leftValueStringSize-1; i >=0; i--) {
tempValue=(int) string2IntegerMap.get(String.valueOf(leftValueString.charAt(i)));
if (carry) {
tempValue++;
carry=false;
}
if (tempValue>=radix) {
tempValue-=radix;
carry=true;
}
sb.insert(0,keys.get(tempValue));
} if (carry) {
sb.insert(0, 1);
} }
else if (rightValueStringSize>0) {
for (int i = rightValueStringSize-1; i >=0; i--) {
tempValue=(int) string2IntegerMap.get(String.valueOf(rightValueString.charAt(i)));
if (carry) {
tempValue++;
carry=false;
}
if (tempValue>=radix) {
tempValue-=radix;
carry=true;
}
sb.insert(0,keys.get(tempValue));
}
if (carry) {
sb.insert(0, 1);
} }
//StringBuilder sb2=new StringBuilder();
String sss= sb.toString();
return sss;
}
}

算法还有一些瑕疵。

N进制加法的更多相关文章

  1. B进制加法(洛谷1604)

    分析:码农题,照这模拟就行,高精度的B进制,注意字符串反转的技巧. #include <iostream> #include <cstdio> #include <cst ...

  2. hdu2100 26进制加法

    题意:       给你两个26进制数,让你算出他们两个的和. 思路:      水题不解释了,注意这样的数据 AAA AAA 输出A #include<stdio.h> #include ...

  3. XDU 1003 B进制加法(高精度)

    #include<bits/stdc++.h> using namespace std; long long mpow(long long a,long long b) { ; ) ; w ...

  4. noip 1998 洛谷P1013 进制位

    题目描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: L K V E L L K V E K K V E KL V V E KL KK E E K ...

  5. 洛谷 P1013 进制位 【搜索 + 进制运算】

    题目描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: + L K V E L L K V E K K V E KL V V E KL KK E E ...

  6. 洛谷P1013 进制位

    P1013 进制位 题目描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: + L K V E L L K V E K K V E KL V V E ...

  7. [NOIP1998] 提高组 洛谷P1013 进制位

    题目描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: L K V E L L K V E K K V E KL V V E KL KK E E K ...

  8. [NOIP1999]进制位(搜索)

    P1013 进制位 题目描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: + L K V E L L K V E K K V E KL V V E ...

  9. 洛谷 P1013 进制位

    P1013 进制位 题目描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: + L K V E L L K V E K K V E KL V V E ...

随机推荐

  1. JS知识总结

    1.javascript继承机制 原型继承,访问对象属性时,如果对象内部有就返回,找不到就会从对象原型指向的对象原型中查找,一层一层的查找,直到最顶层的对象原型还找不到,就返回undefined. 2 ...

  2. 最短路径算法 SP

    dijkstra求最短路径长度 dijkstra求最短路并记录路径 #include<stdio.h> #include<string.h> #include<stack ...

  3. HDU1847 Good Luck in CET-4 Everybody!

    大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在 考场浸润了十几载的当代大学生,Kiki和Cici更懂得 ...

  4. 汕头市队赛 C KMP codeforces B. Image Preview

    汕头市队赛题目传送门 codeforces题目传送门 这道题我的做法是 尝试先往左走然后往右走 或者先往右走然后往左走 然后注意一下枚举顺序就okay啦 #include<cstdio> ...

  5. [FZU2254]英语考试

    在过三个礼拜,YellowStar有一场专业英语考试,因此它必须着手开始复习. 这天,YellowStar准备了n个需要背的单词,每个单词的长度均为m. YellowStar准备采用联想记忆法来背诵这 ...

  6. 一道面试题:C++相比C#或者java的优势到底在哪里

    被问到了这样一道面试题,当时就懵了,内心一直觉得C++肯定在很多方面要比C#或者java要牛b的. 但是真的不知道怎么回答. 问题是:你以前一直做得是.NET相关项目,现在为什么找C++开发相关工作呢 ...

  7. ZigBee MAC层(下)

    6. MAC功能描述 6.1 信道访问 802.15.4使用的物理无线电信道的访问机制有下面两种: - 基于竞争的访问机制: 设备使用CSMA-CA退避算法以分布式方式访问信道 - 无竞争的访问机制: ...

  8. Linux kernel中断子系统之(五):驱动申请中断API【转】

    转自:http://www.wowotech.net/linux_kenrel/request_threaded_irq.html 一.前言 本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的 ...

  9. hdu 1281(最小点覆盖数)

    棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  10. 使用Pygame制作微信打飞机游戏PC版

    前一阵子看了一篇文章:青少年如何使用Python开始游戏开发 .看完照葫芦画瓢写了一个,觉得挺好玩儿,相当于简单学了下Pygame库.这篇文章是个12岁小孩儿写的,国外小孩儿真心NB,想我12岁的时候 ...