每周算法练习——大数的乘法问题
时间:2022-05-04
本文章向大家介绍每周算法练习——大数的乘法问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
大数问题的思路是使用矩阵或者字符串来存储,今天我试着用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[n];
int i_b[] = new int[n];
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();
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Tungsten Fabric知识库丨构建、安装与公有云部署
- 7. Pandas系列 - 排序和字符串处理
- JVM调优,程序员必须掌握的知识
- 5分钟Flink - 侧输出流(SideOutput)
- 数据库技术:MySQL 基础和 SQL 入门,单表、约束和事务
- ConcurrentHashMap的size方法是线程安全的吗?
- 数据科学家极力推荐核心计算工具-Numpy的前世今生(上)
- 数据库技术:MySQL 多表,外键约束,数据库设计,索引,视图,存储过程触发器,数据控制,数据备份与恢复
- WordPress 站点地址被恶意篡改的防护方案讨论
- 握草,你竟然在代码里下毒!
- MySQL 练习题和答案,以及运行结果截图
- 给你一个优秀的Django工程模板
- 纯css实现选项卡功能
- linux每日一练文件专题之常用文件命令(附昨日答案)
- 搞懂JavaScript全局变量与局部变量,看这篇文章就够了