`

二十进制操作

 
阅读更多
在二十进制中,我们除了使用数字0-9以外,还使用字母a-j(表示10-19),给定两个二十进制整数,求它们的和。输入是两个二十进制整数,且都大于0,不超过100位;输出是它们的和(二十进制),且不包含首0。我们用字符串来表示二十进制整数


import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * <二十进制操作>
 * <功能详细描述>
 * @author  zyy
 * @version  [版本号, 2014-1-16]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public class Vigesimal
{
    /** <一句话功能简述>
     * <在二十进制中,我们除了使用数字0-9以外,还使用字母a-j(表示10-19),给定两个二十进制整数,求它们的和。
     *  输入是两个二十进制整数,且都大于0,不超过100位;
     *  输出是它们的和(二十进制),且不包含首0。我们用字符串来表示二十进制整数。>
     * @param args
     * @see [类、类#方法、类#成员]
     */
    public static  String calculate(String x, String y)
    {
        String regEx = "[^0][a-j0-9]{1,100}"; //表示 不包含首0, 0-9 a-j
        Pattern pat = Pattern.compile(regEx);  
        Matcher mat = pat.matcher(x);  
        boolean rs = mat.matches();  
        if (!rs)
        {
            System.out.println("第一个字符串格式不正确");
            return "";
        }                

        Matcher mat2 = pat.matcher(y);  
        boolean rs2 = mat2.matches();  
        if (!rs2)
        {
            System.out.println("第二个字符串格式不正确");
            return "";
        }
        
        // 把字符转和数字的关系存入map
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        
        map.put("0", 0);
        map.put("1", 1);
        map.put("2", 2);
        map.put("3", 3);
        map.put("4", 4);
        map.put("5", 5);
        map.put("6", 6);
        map.put("7", 7);
        map.put("8", 8);
        map.put("9", 9);
        map.put("a", 10);
        map.put("b", 11);
        map.put("c", 12);
        map.put("d", 13);
        map.put("e", 14);
        map.put("f", 15);
        map.put("g", 16);
        map.put("h", 17);
        map.put("i", 18);
        map.put("j", 19);
        
        // 第一个和第二个字符串的长度
        int firLength = x.length(),
        secLength = y.length();
        
        // 十进制的数字
        BigDecimal firInt = new BigDecimal(0),  secInt = new BigDecimal(0);
        
        // 第一个字符串转化为十进制的数字
        for (int i = 0; i < firLength; i++)
        {
           BigDecimal temp1 = new BigDecimal(0);
           temp1 = temp1.add(new BigDecimal(map.get(x.substring(i, i + 1)).intValue()))
               .multiply(new BigDecimal((int)Math.pow(20, firLength - (i + 1))));
           
           firInt = firInt.add(temp1);
        }
        
        // 第二个字符串转化为十进制的数字
        for (int i = 0; i < secLength; i++)
        {
            BigDecimal temp2 = new BigDecimal(0);
            temp2 = temp2.add(new BigDecimal(map.get(y.substring(i, i + 1)).intValue()))
                .multiply(new BigDecimal((int)Math.pow(20, secLength - (i + 1))));
            
            secInt = secInt.add(temp2);
        }
        
        // add之后的10进制结果
        BigDecimal result = firInt.add(secInt);
        
        // 把BigDecimal转为BigInteger数字
        BigInteger intResult = result.toBigInteger();
        
        // 返回20进制的字符串
        return intResult.toString(20);
            
    }
    
    public static void main(String args[]) 
    {     
        System.out.println(calculate("9c", "de5h53hi0id437bbf796ih39bff86igeii10e8i2c983eg00c9ac1a678b80h0bf3a86cf9cb2h6e8830292cef88eg3ga312c"));
    } 
}
分享到:
评论

相关推荐

    1.二进制字符串转十进制数值_labview_二进制转十进制_

    在LabVIEW编程环境中,二进制字符串转换为十进制数值是常见的操作,尤其是在处理数据或进行计算时。本文将详细讲解如何利用LabVIEW实现这一转换,并探讨相关知识点。 首先,我们要理解二进制和十进制之间的基本概念...

    二进制转换为十进制(Verilog代码)

    在数字系统中,二进制和十进制之间的转换是基本操作。二进制系统(Base-2)使用两个符号,0 和 1,来表示数值,而十进制系统(Base-10)使用十个符号,0 到 9。在计算机科学中,尤其是硬件描述语言(如 Verilog)中...

    c# 二进制与十进制的转换

    总之,理解和掌握二进制与十进制之间的转换是C#编程中的基本技能,尤其在处理计算机数据存储、网络通信、位操作等场景时更为关键。通过实践和学习,我们可以更好地驾驭这两种数字系统,从而提升我们的编程能力。

    Multisim八位二进制转三位十进制

    《Multisim八位二进制转三位十进制——深入理解数字电路设计与仿真》 在电子工程和计算机科学领域,数据的表示和转换是基础且关键的一部分。本篇文章将详细探讨如何利用Multisim软件进行八位二进制到三位十进制的...

    易语言置入汇编实现二进制十进制互转

    反之,从十进制转换为二进制时,可以利用汇编进行除2操作和取余操作,每次将余数保存,并更新十进制数。重复此过程直到十进制数变为0。 在提供的压缩包文件"易语言置入汇编实现二进制十进制互转源码"中,应该包含了...

    二进制转十进制和十进制转二进制

    在计算机科学中,二进制、十进制和其他进制之间的转换是基本的数学操作,对于理解计算机如何处理数据至关重要。二进制系统(Binary)是计算机内部的基础,使用0和1来表示所有数据和指令。而十进制是我们日常生活中最...

    十进制转化成二进制数实现

    在实际编程中,C++标准库还提供了`std::bitset`类,可以方便地进行二进制操作,包括转换。例如: ```cpp #include int decimal = 13; std::bitset&lt;32&gt; binary(decimal); std::cout () ; // 输出...

    汇编实现输入十进制输出二进制、十进制和十六进制

    在计算机科学中,二进制、十进制和十六进制是三种常见的数值表示方式,它们在编程和硬件设计中有着广泛的应用。汇编语言作为底层编程语言,直接与计算机硬件交互,因此理解和掌握如何在汇编中进行不同进制之间的转换...

    二进制转十进制,十进制转二进制的原理

    1. **除法操作**:将十进制数不断除以2。 2. **记录余数**:每次除法后保留余数。 3. **倒序排列**:当商为1时停止,将所有余数及最后的1按倒序排列,即从下到上依次排列,得到的就是该十进制数对应的二进制表示。 ...

    进制间的转换二进制与十进制转换流程图解

    这里主要探讨的是二进制和十进制之间的转换方法。 **一、整数部分的转换** 1. **从十进制到二进制:短除法** 整数部分的转换通常采用短除法。例如,将十进制数156转换为二进制: - 首先用2去除156,得到商78余0...

    用栈实现十进制转换成二进制(c语言)

    在计算机科学中,将十进制数转换为二进制数是常见的操作,尤其是在低级编程和理解计算机内部工作原理时。C语言是一种强大的、低级别的编程语言,它提供了直接操作内存和数据结构的能力,如栈(stack)。在这个场景中...

    二进制十进制互转

    在计算机科学中,二进制和十进制是两种最常见的数字表示法。二进制系统(Binary System)基于2的幂次,而十进制系统则基于10的幂次。在C++编程中,理解和操作这两种数字系统是至关重要的,尤其是在处理数据存储、...

    如何转换浮点数的二进制格式为十进制

    转换过程涉及到位操作、二进制到十进制转换、指数调整等概念,这些都是理解和处理二进制浮点数时的基础知识。在实际编程中,理解这种转换方式对于解析二进制数据流或理解底层计算机制非常重要。通过熟悉这些概念,...

    汇编语言 二进制数和十进制数相互转换

    总之,汇编语言中的二进制与十进制数转换是一项基础但关键的任务,它要求程序员深入理解数值系统以及如何在低级别上操作数据。通过这个课程设计,你将深化对汇编语言的理解,并提高解决实际问题的能力。

    基于VC++6.0 十进制转换二进制及十六进制

    在编程领域,转换数字系统是常见的任务之一。本教程聚焦于使用VC++6.0环境进行十进制到二进制以及十进制到...通过实际操作,结合提供的"十进制转二进制"源代码,你可以逐步掌握这一技能并进一步拓展到其他数制的转换。

    十进制和二进制转换

    ### 十进制与二进制转换方法详解 在计算机科学和数字电子学中,不同数制之间的转换是一项基本技能。本文将详细介绍十进制与二进制之间的转换方法,并通过具体的实例帮助读者更好地理解这一过程。 #### 一、十进制...

    十进制小数和二进制小数相互转换(C++版)

    在C++编程语言中,十进制与二进制之间的转换是一项基础技能,尤其在处理数字和计算机内部表示时非常重要。文档《十进制小数和二进制小数相互转换》为初学者提供了一种理解转换过程的方法。由于转换涉及整数和小数...

    matlab 实现十进制与二进制的转换

    在MATLAB中,进行十进制与二进制之间的转换是非常常见的操作,特别是在数字信号处理、计算机编程和算法设计等领域。MATLAB提供了内置函数来轻松完成这些转换。本篇文章将详细探讨如何使用MATLAB实现十进制到二进制...

    易语言十进制转二进制

    在易语言中,进行十进制到二进制的转换是一项基本操作,对于理解和实现数字系统的转换至关重要。 十进制是我们日常生活最常用的计数方式,它基于10个符号(0-9)进行计算。而二进制则是计算机内部的基础运算单位,...

    十进制 八进制 二进制 十六进制转换工具

    本文将详细阐述十进制、八进制、二进制以及十六进制之间的转换工具及其应用。 首先,让我们理解这四种进制的基本原理: 1. **十进制(Decimal)**:我们日常生活中的计数方式,基数为10,每一位的权重由10的幂次...

Global site tag (gtag.js) - Google Analytics