我是网络公司的一名普通程序员,英文名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;
}
}

算法还有一些瑕疵。

最新文章

  1. 常用js方法整理common.js
  2. BZOJ4296 : [PA2015]Mistrzostwa
  3. jquery api调用
  4. PHP超时处理全面总结(转)
  5. Windows 7/8 自带定时关机命令
  6. websocket++简单使用例子
  7. .NET通信中的同步和异步处理
  8. 《Machine Learning》系列学习笔记之第三周
  9. 检查服务器是否开启GD库
  10. 在使用ajax实现三级联动调用数据库数据并通过调出的数据进行二级表单查询
  11. B. Divisor Subtraction
  12. sublime3 快速创建html模板
  13. Android高级_第三方框架Xutils
  14. extjs6入门:用sencha cmd搭建简单的extjs6项目
  15. Direct2D教程VI——转换(Transform)
  16. linux 文件操作命令 touch、cat、more、less、head、tail
  17. MVC,MVP 和 MVVM 的图示 转自阮一峰先生网络日志
  18. python中如何将两个list合并成一个list,不用for语句
  19. Map和Bean的相互转换
  20. 20155320 实验四 Android程序设计

热门文章

  1. Html 让文字显示在图片的上面
  2. Spring MVC框架下 从后台读取数据库并显示在前台页面【笔记自用 不推荐作为参考】
  3. [BZOJ3238][Ahoi2013]差异解题报告|后缀数组
  4. Kali 1.0 / 2.0 安装中文输入法(谷歌pinyin + 其他)
  5. 端到端测试,protractor测试的教程
  6. android ARM 汇编学习 —— hello world
  7. Day 14 python 之 字符串练习
  8. 【C++】指针和new相关
  9. [译]lambda表达式对 SAM (单个抽象方法类)type的处理方式
  10. 使用bottle进行web开发(5):Generating Content