三十六进制加法

Posted woniu4

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三十六进制加法相关的知识,希望对你有一定的参考价值。

public class Solution
{  
    /**
     * num1 num2 为两个三十六进制的数,计算相加结果
     * @param num1
     * @param num2
     * @return
     */
    public String add(String num1, String num2)
    {
        StringBuilder result = new StringBuilder();
        int carry = 0;
        int len1 = num1.length() - 1;
        int len2 = num2.length() - 1;
        for(; len1>=0 && len2>=0; len1--, len2--)
        {
            carry = add(num1, num2, result, carry, len1, len2);
        }
        
        while(len1>=0)
        {
            carry = add(num1, num2, result, carry, len1, len2);
            len1--;
        }
        while(len2>=0)
        {
            carry = add(num1, num2, result, carry, len1, len2);
            len2--;
        }
        if(carry > 0)
            result.append(carry);
        System.out.println(result.toString());
        return result.reverse().toString();
    }

    private int add(String num1, String num2, StringBuilder result, int carry, int len1, int len2)
    {
        int n1 = 0, n2 = 0;
        if(len1 >= 0)
        {
            n1 = getNumByChar(num1.charAt(len1));
        }
        if(len2 >= 0)
        {
            n2 = getNumByChar(num2.charAt(len2));
        }
        int sum = n1 + n2 + carry;
        carry = sum / 36;
        result.append(getCharByNum(sum % 36));
        return carry;
    }
    
    public char getCharByNum(int n)
    {
        if(n<10)
        {
            return (char)((int)‘0‘ + n);
        }
        else
        {
            return (char)((int)‘a‘ + (n-10));
        }
    }
    
    public int getNumByChar(char c)
    {
        if(c>=0 && c<=9)
        {
            return c - ‘0‘;
        }
        else
        {
            return (c - ‘a‘) + 10;
        }
    }
    
    public static void main(String[] args)
    {
        System.out.println(new Solution().add("ab", "z"));
    }
    
}

 

以上是关于三十六进制加法的主要内容,如果未能解决你的问题,请参考以下文章

不用加减乘除做加法

c++builder6.0设计一个简单的加法计算器,附上源代码,小弟不胜感激!

基础编程题之不用加减乘除做加法

剑指Offer之不用加减乘除做加法

超级加法

Leetcode题解——算法思想之数学