N进制加法
2016-03-28 20:48
302 查看
我是网络公司的一名普通程序员,英文名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; } }
算法还有一些瑕疵。
相关文章推荐
- Python项目实战:个人博客(1)
- 使用Fiddler调试你的移动应用后台api接口
- oracle单引号和双引号的区别
- 基于GNURadio平台的DAB发射实现(1)
- 实现开启和关闭android移动网络(做AppWidget开发的收获)
- C基础学习的简单记录--基础练习(1)
- Android 手动显示和隐藏软键盘
- MySQL 数据库实现远程连接
- centos6 ssh 设置免密码登录
- ubuntu14.04关机卡死解决方案
- HDU 2122 Ice_cream’s world III
- spring data jpa 了解以及环境搭建
- C - Train Problem II——(HDU 1023 Catalan 数)
- 顺序表基本运算(线性表)c
- C++中str1::function和bind
- 实验4 颜色、字符串资源的使用 实验报告
- 第三周
- 【NOIP2013提高组day2】【JZOJ 3537】华容道
- linux下so动态库一些不为人知的秘密(上)
- EditText焦点一直在末尾!