• N进制加法


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

    输入:

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

    代码如下:

      1 import java.util.ArrayList;
      2 import java.util.HashMap;
      3 import java.util.Map;
      4 import java.util.Scanner;
      5 
      6 
      7 public class Main {
      8 
      9     public static void main(String[] args){
     10         Map<String, Integer> string2IntegerMap=new HashMap();
     11         ArrayList<String> keys=new ArrayList();
     12         Integer tempValue=10;
     13         char initChar='a';
     14         for (int i = 0; i <=9; i++) {
     15             keys.add(String.valueOf(i));
     16         }
     17         //keys.add(String.valueOf(initChar));
     18         for (int i = 10; i <36; i++) {
     19             //System.out.println(initChar);
     20             keys.add(String.valueOf(initChar));
     21             string2IntegerMap.put(String.valueOf(initChar), tempValue);
     22             tempValue=tempValue+1;
     23             initChar=(char) (initChar+1);
     24             
     25         }
     26         for (int i = 0; i <=9; i++) {
     27             string2IntegerMap.put(String.valueOf(i), i);
     28         }
     29         String ss=add(string2IntegerMap,keys);
     30         System.out.println(ss);
     31     }
     32     public static String add(Map string2IntegerMap,ArrayList keys){
     33         Scanner scanner=new Scanner(System.in);
     34         //scanner.useDelimiter("
    ");
     35         int radix=scanner.nextInt();
     36         String leftValueString=scanner.next();
     37         String rightValueString=scanner.next();
     38         StringBuilder sb=new StringBuilder();
     39         
     40         int leftValueStringSize=leftValueString.length();
     41         int rightValueStringSize=rightValueString.length();
     42         int minSize=leftValueStringSize<rightValueStringSize?leftValueStringSize:rightValueStringSize;
     43         int maxSize=leftValueStringSize>rightValueStringSize?leftValueStringSize:rightValueStringSize;
     44         //int biggerFlag;
     45         int leftValue,rightValue;
     46         boolean carry=false;
     47         int result;
     48         for (int i = 0; i < minSize; i++) {
     49             leftValue=(int) string2IntegerMap.get(String.valueOf(leftValueString.charAt(--leftValueStringSize)));
     50             rightValue=(int) string2IntegerMap.get(String.valueOf(rightValueString.charAt(--rightValueStringSize)));
     51             if (leftValue<radix&&rightValue<radix) {
     52                 result=leftValue+rightValue;
     53                 if (carry) {
     54                     result++;
     55                     carry=false;
     56                 }
     57                 if (result>=radix) {
     58                     carry=true;
     59                     result-=radix;
     60                 }
     61                 sb.insert(0, keys.get(result));
     62             }
     63         }
     64         if ((minSize==maxSize)&&carry) {
     65                 sb.insert(0, 1);
     66         }
     67         int tempValue;
     68         //carry=false;
     69         if (leftValueStringSize>0) {
     70             for (int i = leftValueStringSize-1; i >=0; i--) {
     71                 tempValue=(int) string2IntegerMap.get(String.valueOf(leftValueString.charAt(i)));
     72                 if (carry) {
     73                     tempValue++;
     74                     carry=false;
     75                 }
     76                 if (tempValue>=radix) {
     77                         tempValue-=radix;
     78                         carry=true;
     79                     }
     80                     sb.insert(0,keys.get(tempValue));
     81             }
     82             
     83             if (carry) {
     84              sb.insert(0, 1);
     85             }
     86         
     87         }
     88         else if (rightValueStringSize>0) {
     89             for (int i = rightValueStringSize-1; i >=0; i--) {
     90                 tempValue=(int) string2IntegerMap.get(String.valueOf(rightValueString.charAt(i)));
     91                 if (carry) {
     92                     tempValue++;
     93                     carry=false;
     94                 }
     95                 if (tempValue>=radix) {
     96                         tempValue-=radix;
     97                         carry=true;
     98                     }
     99                     sb.insert(0,keys.get(tempValue));
    100             }
    101             if (carry) {
    102                 sb.insert(0, 1);
    103             }
    104             
    105         }
    106         //StringBuilder sb2=new StringBuilder();
    107         String sss= sb.toString();
    108         return sss;
    109     }
    110 }

     算法还有一些瑕疵。

  • 相关阅读:
    大数斐波那契数列
    1、硬件IO口配置;
    1通过URL对象的openStream()方法能够得到指定资源的输入流。
    题意:
    一、作用:
    倒是在网上有看到显卡没装风尚导致该问题的,最后换了一个带风扇的显卡就解决的:
    Jeewx 捷微管家操作配置文档(开源版本号)
    工业控制系统USB存储设备可信管理方案的(ICICS2015)论文PPT:TMSUI: A Trust Management Scheme
    java.lang.ArithmeticException: Rounding necessary
    springcloud 熔断处理
  • 原文地址:https://www.cnblogs.com/lz3018/p/5330531.html
Copyright © 2020-2023  润新知