我开始编写这段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;
}