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 }

     算法还有一些瑕疵。

  • 相关阅读:
    eclipse export runnable jar(导出可执行jar包) runnable jar可以执行的
    mave常用指令
    771. Jewels and Stones珠宝数组和石头数组中的字母对应
    624. Maximum Distance in Arrays二重数组中的最大差值距离
    724. Find Pivot Index 找到中轴下标
    605. Can Place Flowers零一间隔种花
    581. Shortest Unsorted Continuous Subarray连续数组中的递增异常情况
    747. Largest Number At Least Twice of Others比所有数字都大两倍的最大数
    643. Maximum Average Subarray I 最大子数组的平均值
    414. Third Maximum Number数组中第三大的数字
  • 原文地址:https://www.cnblogs.com/lz3018/p/5330531.html
Copyright © 2011-2022 走看看