两个非常大的数字相加,相减(JAVA)

两个非常大的数字相加,相减(JAVA)注意点 大数相加的时候没有判断数字的正负 如果都是正数 那么就可以按照正数相加来计算 如果是一正一负可以转换成大整数相减 两个负数可以先保存符号 然后相加 加法和减法的输入都不包括符号 加法 public String bigNumberAdd String f

大家好,我是讯享网,很高兴认识大家。

注意点:  

大数相加的时候没有判断数字的正负,

如果都是正数,那么就可以按照正数相加来计算,

如果是一正一负可以转换成大整数相减,
两个负数可以先保存符号,然后相加。



讯享网

加法和减法的输入都不包括符号

加法

 public String bigNumberAdd(String f, String s) { System.out.print("加法:" + f + "+" + s + "="); // 翻转两个字符串,并转换成数组 char[] a = new StringBuffer(f).reverse().toString().toCharArray(); char[] b = new StringBuffer(s).reverse().toString().toCharArray(); int lenA = a.length; int lenB = b.length; // 计算两个长字符串中的较长字符串的长度 int len = lenA > lenB ? lenA : lenB; int[] result = new int[len + 1]; for (int i = 0; i < len + 1; i++) { // 如果当前的i超过了其中的一个,就用0代替,和另一个字符数组中的数字相加 int aint = i < lenA ? (a[i] - '0') : 0; int bint = i < lenB ? (b[i] - '0') : 0; result[i] = aint + bint; } // 处理结果集合,如果大于10的就向前一位进位,本身进行除10取余 for (int i = 0; i < result.length; i++) { if (result[i] >= 10) { result[i + 1] += result[i] / 10; result[i] %= 10; } } StringBuffer sb = new StringBuffer(); // 该字段用于标识是否有前置0,如果有就不要存储 boolean flag = true; // 注意从后往前 for (int i = len; i >= 0; i--) { if (result[i] == 0 && flag) { continue; } else { flag = false; } sb.append(result[i]); } // 结果 System.out.println(sb.toString()); return sb.toString(); }

讯享网

减法

讯享网 public static String bigNumberSub(String f, String s) { System.out.print("减法:" + f + "-" + s + "="); // 将字符串翻转并转换成字符数组 char[] a = new StringBuffer(f).reverse().toString().toCharArray(); char[] b = new StringBuffer(s).reverse().toString().toCharArray(); int lenA = a.length; int lenB = b.length; // 找到最大长度 int len = lenA > lenB ? lenA : lenB; int[] result = new int[len]; // 表示结果的正负 char sign = '+'; // 判断最终结果的正负 if (lenA < lenB) { sign = '-'; } else if (lenA == lenB) { int i = lenA - 1; // 找到第一个不相等的 // 注意下标0处理 while (i > 0 && a[i] == b[i]) { i--; } if (a[i] < b[i]) { sign = '-'; } } // 计算结果集,如果最终结果为正,那么就a-b否则的话就b-a for (int i = 0; i < len; i++) { int aint = i < lenA ? (a[i] - '0') : 0; int bint = i < lenB ? (b[i] - '0') : 0; if (sign == '+') { result[i] = aint - bint; } else { result[i] = bint - aint; } } // 如果结果集合中的某一位小于零,那么就向前一位借一, // 然后将本位加上10。其实就相当于借位做减法 for (int i = 0; i < result.length - 1; i++) { if (result[i] < 0) { result[i + 1] -= 1; result[i] += 10; } } StringBuffer sb = new StringBuffer(); // 如果最终结果为负值,就将负号放在最前面,正号则不需要 if (sign == '-') { sb.append('-'); } // 判断是否有前置0 boolean flag = true; for (int i = len - 1; i >= 0; i--) { if (result[i] == 0 && flag) { continue; } else { flag = false; } sb.append(result[i]); } // 结果为一位且是0,被上面的for处理了 // 如果最终结果集合中没有值,就说明是两值相等,最终返回0 if (sb.toString().equals("")) { sb.append("0"); } // 返回值 System.out.println(sb.toString()); return sb.toString(); } 


小讯
上一篇 2025-01-08 07:11
下一篇 2025-01-28 09:21

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/47767.html