链家笔试题--java实现两个大整数相乘的算法
2018-03-29 16:39
351 查看
两个字符串表示两个非常大的数,请设计算法计算这两个大数的乘积,结果用字符串表示。例如S1=”7832974972840919321747983209327”,S2=”1987432091904327543957”,设计算法计算出S1*S2的结果,结果用String输出,不准用BigInter。
思路:
根据手工计算两数相乘的过程,用代码实现这个过程。注意没有考虑负数的情况。
代码如下:
思路:
根据手工计算两数相乘的过程,用代码实现这个过程。注意没有考虑负数的情况。
代码如下:
import java.util.Scanner; /** * 两个大整数相乘求结果返回字符串。 * * */ public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str1 = sc.nextLine(); String str2 = sc.nextLine(); String result = getResult(str1, str2); System.out.println(result); } private static String getResult(String str1, String str2) { // 求出两个字符串的长度 int n = str1.length(); int m = str2.length(); // 定义一个数组接收结果,长度一定不会超过n+m int num[] = new int[n + m]; // 遍历字符串的每一位,从后往前遍历,然后计算结果 for (int i = 0; i < n; i++) { // 遍历每一位 int a = str1.charAt(n - i - 1) - '0'; // 定义一个进位 int temp = 0; for (int j = 0; j < m; j++) { int b = str2.charAt(m - j - 1) - '0'; // 计算 进位+num[i+j]+a*b temp = temp + num[i + j] + a * b; // 去余 将个位存入数组中 num[i + j] = temp % 10; // 保存进位 temp = temp / 10; } // 第一轮循环结束,如果有进位,将进位放入更高的位置 num[i + m] = temp; } // 计算结果到底是几位数字 int i = m + n - 1; while (i > 0 && num[i] == 0) { i--; } // 定义一个字符串 将数组反过来放入字符串中 StringBuilder result = new StringBuilder(); while (i >= 0) { result.append(num[i--]); } return result.toString(); } }
相关文章推荐
- 大数算法 -- 正整数相乘(Java 实现)
- 【LeetCode-面试算法经典-Java实现】【029-Divide Two Integers(两个整数相除)】
- 大整数相乘算法-Java实现
- 笔试算法题(12):整数的string到int转换 & 两个栈实现队列
- 大整数乘法算法简单实现 java
- 【老鸟学算法】大整数乘法——算法思想及java实现
- 矩阵相乘算法的Java语言实现
- 求两个整数的最大公约数的各种算法(C语言实现)
- 分治算法-大整数相乘(JAVA实现)
- JS实现两个大数(整数)相乘
- 比较两个List的算法 java实现
- 百度武汉站笔试题——算法题第一第二题Java实现
- java中如何实现具有交换两个整数值
- 欧几里得求两个整数最大公约数算法的汇编递归实现代码
- JS实现两个大数(整数)相乘 实例代码
- 我在北京找工作(四):java实现递归<1> 一些笔试题+常见算法
- 求两个整数的最大公约数的各种算法(C语言实现)
- Java笔试题:两个大数相乘
- Java实现两个整数相除
- 单链表实现两个长整数相乘