/**
* 两数相加
* @param numStr1 数1
* @param numStr2 数2
* @return 结果
*/
public static String add(String numStr1, String numStr2){
int numLen1 = numStr1.length();
int numLen2 = numStr2.length();
int[] numArray1 = new int[numLen1]; //数字数组
int[] numArray2 = new int[numLen2];
// "12345"-> [5,4,3,2,1]
for(int i=0;i<numLen1;i++){
String c = numStr1.substring(i,i+1);
numArray1[numLen1-i-1] = Integer.parseInt(c); //低位存字符串尾部数字
}
for(int i=0;i<numLen2;i++){
String c = numStr2.substring(i,i+1);
numArray2[numLen2-i-1] = Integer.parseInt(c); //低位存字符串尾部数字
}
int minLen = 0; //取长度小的数位数
int maxLen = 0; //取长度大的数位数
int[] maxArray = null; //长度大的数
if(numLen1<numLen2){
minLen = numLen1;
maxLen = numLen2;
maxArray = numArray2;
}else{
minLen = numLen2;
maxLen = numLen1;
maxArray = numArray1;
}
int[] resultArray = new int[maxLen+1]; //考虑到可能会进位,多给一个元素空间
//两数长度相同的部分,同位相加,超出9进1
int added = 0;
int i=0;
for(;i<minLen;i++){
int t = numArray1[i]+numArray2[i]+added; //两数相加,再加进位
if(t>9){
added = 1; //进1
resultArray[i] = t-10; //当前位计算结果
}else{
added = 0; //不进位
resultArray[i] = t; //当前位计算结果
}
}
//长度超出部分累加
for(;i<maxLen;i++){
int t = maxArray[i]+added; //多余位数加上进位
if(t>9){
added = 1; //进1
resultArray[i] = t-10; //当前位计算结果
}else{
added = 0; //不进位
resultArray[i] = t; //当前位计算结果
}
}
resultArray[i] = added; //最高位
//拼接结果 [1,4,8,2,0] -> 2841
StringBuilder builder = new StringBuilder();
for(int n=resultArray.length-1;n>=0;n--){
//如果最高位为0,移除
if(n==resultArray.length-1 && resultArray[resultArray.length-1]==0){
continue; //跳过
}else{
builder.append(resultArray[n]);
}
}
return builder.toString();
}
/**
* 两数相减
* @param numStr1 数1
* @param numStr2 数2
* @return 结果
*/
public static String subtract(String numStr1,String numStr2){
int numLen1 = numStr1.length();
int numLen2 = numStr2.length();
int[] numArray1 = new int[numLen1]; //数字数组
int[] numArray2 = new int[numLen2];
// "12345"-> [5,4,3,2,1]
for(int i=0;i<numLen1;i++){
String c = numStr1.substring(i,i+1);
numArray1[numLen1-i-1] = Integer.parseInt(c); //低位存字符串尾部数字
}
for(int i=0;i<numLen2;i++){
String c = numStr2.substring(i,i+1);
numArray2[numLen2-i-1] = Integer.parseInt(c); //低位存字符串尾部数字
}
int minLen = 0; //取长度小的数位数
int maxLen = 0; //取长度大的数位数
int[] maxArray = null; //数值大的数
if(numLen1<numLen2){
minLen = numLen1;
maxLen = numLen2;
maxArray = num
java大数四则运算
最新推荐文章于 2022-01-19 15:46:27 发布
本文详细探讨了Java中处理大数的四则运算,包括如何使用BigInteger类进行加减乘除操作,以及在运算过程中涉及的精度问题和性能考虑。

最低0.47元/天 解锁文章
983

被折叠的 条评论
为什么被折叠?



