我是网络公司的一名普通程序员,英文名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. centos7上安装docker-ce社区版

    报错:Error: docker-ce-selinux conflicts with 2:container-selinux-2.12-2.gite7096ce.el7.noarch 转载:http: ...

  2. jquery学习之add()

    解读: add() 将元素添加到匹配元素的集合中 例1: <!DOCTYPE html> <html> <head> <style> div { wid ...

  3. 创建Maven项目出现:An internal error occurred during: "Retrieving archetypes:". Java heap space 错误解决办法

    首先说明一下网上的方法: 在Eclipse中创建Maven的Web项目时出现错误:An internal error occurred during: "Retrieving archety ...

  4. 图论:Stoer-Wagner算法

    利用Stoer-Wagner算法求无向图最小割 直接给出算法描述和过程实现: 算法步骤: . 设最小割cut=INF, 任选一个点s到集合A中, 定义W(A, p)为A中的所有点到A外一点p的权总和. ...

  5. codevs3304 水果姐逛水果街Ⅰ

    题目描述 Description 水果姐今天心情不错,来到了水果街. 水果街有n家水果店,呈直线结构,编号为1~n,每家店能买水果也能卖水果,并且同一家店卖与买的价格一样. 学过oi的水果姐迅速发现了 ...

  6. 单源最短路模板_SPFA_Dijkstra(堆优化)_C++

    随手一打就是标准的SPFA,默认1号节点为出发点,当然不用 f 判断是否在队里也可以,只是这样更优化一点 void spfa() { int i,x,k; ;i<=n;i++) { d[i]=o ...

  7. bzoj 2819 博弈论

    我们可以把 n为偶数的时候,n*n的棋盘看成若干个不相交的2*1的格子,那么对于每个2*1的格子,如果先手选了其中的一个,另一个人都可以选另一个,所以最后使先手没有可以选的格子,先手必败(这里的先手并 ...

  8. pyhton发送邮件

    # import smtplib # from email.mime.text import MIMEText # _user = "你的qq邮箱" # _pwd = " ...

  9. Swift 学习之二十一:?和 !(详解)

    http://blog.csdn.net/woaifen3344/article/details/30244201 Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始 ...

  10. 虚拟机vmware10.0.0里设置Suse Linux Enterprise 11系统静态IP上网

    http://blog.csdn.net/usbdrivers/article/details/50035615 首次在虚拟机里安装Suse Linux Enterprise 11,采用NET方式能够 ...