弦乐和弦乐的优化转换操作

时间:2017-02-10 12:21:15

标签: java integer-arithmetic

我开始编写这段java代码,它允许我添加和减去(大)数字,这些数字使用String而不是数值数据类型表示。这允许我对数字大于数值数据类型可以处理的数字进行基本计算。

它有点粗糙和准备好,例如,我根本不对输入字符串执行任何检查,但是对于我使用的约束,代码工作正常。

我对java库函数不是很熟悉(有什么东西而不是Character#getNumericValue哪个更好?)我想知道是否有提高执行速度的空间。我想当输入数字的长度差别很大时,使用' 0来保持循环运行并不是非常有效。也许我根本没有使用一个非常好的算法来做这件事。任何指针都会受到欢迎。

public static String addBig(String a, String b) 
{
    // no checks or exception handling at all ...
    String result = "";

    int carry = 0;
    int a_int, b_int, res_int;

    for(int current = 1; ; current++)
    {
        if(current > a.length() && current > b.length()) 
        {
            if(carry == 1)
                result = "1" + result;

            break;
        }

        a_int = a.length() - current < 0 ? 0
            : Character.getNumericValue(a.charAt(a.length() - current));
        b_int = b.length() - current < 0 ? 0
            : Character.getNumericValue(b.charAt(b.length() - current));

        res_int = a_int + b_int + carry;

        if(res_int > 9)
        {
            res_int -= 10;
            carry = 1;
        } 
        else
            carry = 0;

        result = Integer.toString(res_int) + result;
    }

    return result;
}

public static String subtractBig(String a, String b) 
{
    // no checks or exception handling at all, a is expected to be bigger than b
    String result = "";

    int borrow = 0;
    int a_int, b_int, res_int;

    for(int current = 1; current <= a.length(); current++) 
    {
        // subtract the digits
        a_int = Character.getNumericValue(a.charAt(a.length() - current));

        b_int = b.length() - current < 0 ? 0
            : Character.getNumericValue(b.charAt(b.length()-current));

        res_int = (a_int-borrow)-b_int;

        if(res_int < 0)
        {
            res_int += 10;
            borrow = 1;
        }
        else
            borrow = 0;

        result = Integer.toString(res_int) + result;
    }

    // tidy zeros
    while(result.length() > 1 && result.charAt(0) == '0')
        result = result.substring(1);

    return result;
}

0 个答案:

没有答案