每周算法练习——大数的乘法问题
2014-10-16 20:49
381 查看
大数问题的思路是使用矩阵或者字符串来存储,今天我试着用Java实现了这样的功能,这段程序只是基本模拟大数乘法,当然实现的只是基本的原理。
Java代码:
Java代码:
package org.algorithm.nqueens; /** * 用于计算大数的乘法,有可能大数相乘后的结果已经超出了可以表示的范围 这里使用String表示一个大数,简单来说我们就去实现两个String的相乘 * * @author dell * */ public class Multiple { public static void main(String args[]) { String str_a = "100"; String str_b = "100000000"; System.out.println(multipleTwoString(str_a, str_b)); } public static String multipleTwoString(String str_a, String str_b) { int length_a = str_a.length(); int length_b = str_b.length(); int n = (length_a > length_b ? length_a : length_b); // 将两个String类型转换成char型的数组 char c_a[] = str_a.toCharArray(); char c_b[] = str_b.toCharArray(); // 转换成整形的数组 int i_a[] = new int ; int i_b[] = new int ; int index_a = length_a - 1; int index_b = length_b - 1; for (int i = n - 1; i >= 0; i--) { if (index_a == -1) { i_a[i] = 0; } else { try{ i_a[i] = Integer.parseInt(Character.toString(c_a[index_a])); }catch(Exception e){ return "str_a不是整数,请输入整数"; } index_a--; } if (index_b == -1) { i_b[i] = 0; } else { try{ i_b[i] = Integer.parseInt(Character.toString(c_b[index_b])); }catch(Exception e){ return "str_b不是整数,请输入整数"; } index_b--; } } //完成两个数组中数的乘法 int result[] = new int[2 * n - 1]; for (int i = 0; i < 2 * n - 1; i++) { int k = 2 * n - 2 - i; for (int j = 0; j < n; j++) { int k_1 = n - 1 - j; int k_2 = k - k_1; if (k_1 >= 0 && k_2 >= 0 && k_2 < n) { result[i] += i_a[j] * i_b[n - 1 - k_2]; } } } //实现进位的问题 int tmp = 0; if (result[2 * n - 2] > 9) { tmp = result[2 * n - 2] / 10; result[2 * n - 2] = result[2 * n - 2] % 10; } for (int i = 2 * n - 3; i >= 0; i--) { result[i] += tmp; if (result[i] > 9) { tmp = result[i] / 10; result[i] = result[i] % 10; } } StringBuffer sb = new StringBuffer(); boolean flag = false;//主要用于最终结果的前面去0 for (int i = 0; i < 2 * n - 1; i++) { if (result[i] != 0) { flag = true; } if (flag == true){ sb.append(result[i]); } } return sb.toString(); } }
相关文章推荐
- 【算法】大数乘法问题及其高效算法
- 计算机算法设计与分析作业01:分治法求解大数乘法+L型骨牌的棋盘覆盖问题
- 每周算法练习——用动态规划求解最短路径问题
- 2018年全国多校算法寒假训练营练习比赛(第三场)E---进击吧!阶乘(Java代码,另附Java解决大数问题的模板)
- 2018年全国多校算法寒假训练营练习比赛(第三场)E-进击吧!阶乘(大数问题)
- 大数乘法问题及其高效算法
- 每周算法练习——最近对问题
- 每周算法练习——n皇后问题
- 算法重拾之路——大数乘法
- 大数乘法溢出问题
- 基础算法,大数加法和乘法的实现
- 值得注意的算法问题,“两次减法操作”竟然比“一次2倍乘法和一次加法”要慢一秒
- 大数乘法的几种算法分析及比较(2014腾讯南京笔试题)
- 大数乘法的几种算法分析及比较(2014腾讯南京笔试题)
- 一个简单的大数乘法算法
- 贪心算法练习:乘船问题
- 每周算法练习——动态规划
- 算法基础——1.6练习(数字数码管、隐藏密码问题)
- 算法解析之大数乘法
- 大数乘法的几种算法分析及比较(2014腾讯南京笔试题)