zoukankan      html  css  js  c++  java
  • 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 }

     算法还有一些瑕疵。

  • 相关阅读:
    Wireshark的简介
    Node.js + Express 构建的订餐系统
    java 文件下载支持中文名称
    java判断A字符串中是否包含B字符
    Java查询目录下的所有文件(包括子目录)
    Java从指定URL下载文件并保存到指定目录
    Java逻辑分页代码
    JS实现文字向上无缝滚动轮播
    JAVA调用外部安装7-Zip压缩和解压zip文件
    Zip文件和RAR文件解压
  • 原文地址:https://www.cnblogs.com/lz3018/p/5330531.html
Copyright © 2011-2022 走看看