/** * 超级计算器——两个大数相乘 * * @author GaoHuanjie */ public class SuperCalculator { public static void main(String[] args) { String multiplier1 = "12"; String multiplier2 = "70"; // String multiplier1 = "13286754398172596"; // String multiplier2 = "2397567453241147"; System.out.println(multiplier1+"x" + multiplier2+"="+product(multiplier1, multiplier2)); } /** * 字符串顺序取反 */ private static String reverse(String str) { return new StringBuffer(str).reverse().toString(); } /** * 将char类型的数据转int类型 */ private static int covertInt(char str){ return Integer.parseInt(String.valueOf(str)); } public static String product(String multiplier1, String multiplier2) {//以12x70为例 char[] multiplierArray1 = reverse(multiplier1).toCharArray();// 高低位对调 {2,1} char[] multiplierArray2 = reverse(multiplier2).toCharArray();// 高低位对调 {0,7} int multiplierLength1 = multiplierArray1.length;// 2 int multiplierLength2 = multiplierArray2.length;// 2 int productSize = multiplierLength1 + multiplierLength2;//两个数的乘积的最大长度 4 int[] productArray = new int[productSize];//乘积数组 {0,0,0,0} for (int j = 0; j < multiplierLength2; j++) {// 对齐逐位相乘 {0,7} for (int i = 0; i < multiplierLength1; i++) {// {2,1} productArray[i + j] = productArray[i + j] + (covertInt(multiplierArray1[i])* covertInt(multiplierArray2[j])); } } //到此productArray元素为{0,14,7,0} for (int i = 0; i < productSize; i++) {// 进位处理 //i=0 i=1 i=2 i=3 int quotient = productArray[i] / 10;//商 0 1 0 0 productArray[i] = productArray[i] % 10;// 0 4 8 0 if (quotient > 0) { productArray[i + 1] = productArray[i + 1] + quotient; } } //到此productArray元素为 {0,4,8,0} int m = 0; for (m = productSize - 1; m >= 0;) {// 找到最高位 if (productArray[m] > 0) { break; } m--; } //至此m的值为 2 StringBuffer stringBuffer = new StringBuffer(); for (int n = 0; n <= m; n++) {// 由最高位開始打印乘积 stringBuffer.append(productArray[m - n]); } // 至此乘积为840 return stringBuffer.toString(); } }
超级计算器——两个大数相乘
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【ArkTS】鸿蒙开发 比较两个数的大小 用户界面输入两个数并输出较大数
【HarmonyOS】 鸿蒙开发 (比较两个值大小,输出较大值)在DevEco Studio中开发,用户界面输入两个值,比较两个值大小并输出较大值。主要是练习了对TextInput属性的应用。
鸿蒙开发 TextInput属性 用户界面输入 两个值比较大小 ArkTS -
两个超级大数相加
两个超级大数相加:给定两个字符串形式的非负整数num1和num2,计算他们的值!!!(一般超越整数类型的表示范围值)。
算法 #include 字符串 倒序 -
389,两个超级大数相加
想了解更多数据结构以及算法题,可以关注微信公众号“数据结构和算法”,每天一题为你精彩解答。也可以扫描下面的二维码关注给定两个字符串形式的
大数相加 算法 字符串 数据结构 git -
算法:如何实现两个大数相加
求两个大数的和
java 开发语言 数组 i++ 倒序 -
3、求两个大整数的相乘问题
】阶乘计算:...
i++ 倒序 数组 #include 大整数