java 中 如何sum 乘法_JAVA中解决大数乘法和加法问题
前言
在日常的算法练习中难免会遇见涉及阶乘的计算的题目,总所周知阶乘的数据会变得非常大,此时int和long型都装不下只能借助于String来表示,所以这里特为大家提供两种解决方案:1、使用Java API中的BigInteger类,该类中提供加(add())、减(subtract())、乘(multiply())、除(divid())的成员方法,我们可以通过这四种成员方法来进行我们的大整数运算。2、由于我们在计算中常用的是大整数加法和大整数乘法运算,所以我们可以自己构造相应的方法来实现我们的计算目的。
一、借助Java API---BigInteger类
示例程序如下
import java.math.BigInteger;
public class Main{
public static void main(String[] args) {
BigInteger bi1 = new BigInteger("123456789");//乘数1
BigInteger bi2 = new BigInteger("123456789");//乘数2
//public BigInteger add(BigInteger val):加
System.out.println("add:"+bi1.add(bi2));
//public BigInteger multiply(BigInteger val):乘
System.out.println("multiply:"+bi1.multiply(bi2));
}
}
二、构造大整数乘法和加法运算的方法
大整数加法运算方法
public static String add(String a,String b){
if(a.length() <= 8 && b.length() <= 8){
return Integer.parseInt(a) + Integer.parseInt(b) + "";
}
String a1 = "0";
String a2 = a;//低八位
if(a.length() > 8){
a1 = a.substring(0,a.length()-8);
a2 = a.substring(a.length()-8);
}
String b1 = "0";
String b2 = b;//低八位
if(b.length() > 8){
b1 = b.substring(0,b.length()-8);
b2 = b.substring(b.length()-8);
}
String t = add(a2,b2);//低八位相加和
if(t.length() > 8) return add(add(a1,b1),"1") + t.substring(1);
while(t.length() < 8) t = "0" + t;//低八位相加和不够八位时,在前面补零
return add(a1,b1) + t;
}
大整数乘法运算方法
public static String muti(String s1,String s2){
if(s1.length() <= 4 && s2.length() <= 4){//当两个乘数均小于4位时,直接计算就可以了
return Integer.parseInt(s1) * Integer.parseInt(s2) + "";
}
if(s1.length() > 4){//当s1位数超过4位时,将s1一分为二
int k = s1.length() / 2;//保存s1被分割位置的下表
String a1 = s1.substring(0,k);//s1的高位
String a2 = s1.substring(k);//s1的低位
return add(muti(a1,s2)+zero(a2.length()),muti(a2,s2));//高位与s2相乘在其后补上s2的长度个零在与低位与s2相乘的结果相加
}
return muti(s2,s1);//当s2的长度超过4时,将s2与s1的位置对调求解
}
注:补零算法zero(int k)实现代码如下
public static String zero(int k){
if(k == 0) return "";
if(k == 1) return "0";
int m = k / 2;
int n = k % 2;
return zero(m) + zero(m) + zero(n);//利用m + m + n = k
}
java 中 如何sum 乘法_JAVA中解决大数乘法和加法问题相关推荐
- java为什么要用反射_Java中为什么需要反射?反射要解决什么问题?
一句话概括就是使用反射可以赋予jvm动态编译的能力,否则类的元数据信息只能用静态编译的方式实现,例如热加载,Tomcat的classloader等等都没法支持 Java中编译类型有两种: 静态编译:在 ...
- java对于数组的定义_Java中方法的定义与使用,以及对数组的初步了解。
方法 方法的含义 定义: 方法就是用来完成解决某件事情或实现某个功能的办法. 方法实现的过程中,会包含很多条语句用于完成某些有意义的功能--通常是处理文本,控制输入或计算数值. 我们可以通过在程序代码 ...
- java如何使截取字符串_java中如何截取字符串中的指定一部分
java中如何截取字符串中的指定一部分 关注:136 答案:4 mip版 解决时间 2021-02-06 13:27 提问者妳涐執唸汰深 2021-02-06 08:56 精选 比如 F:\wor ...
- java中什么是空指针异常_JAVA中的空指针异常如何处理?
你这个问题的解决 问题定位: 在堆栈异常信息的第一行就可以定位到是哪里出了空指针,倘若这里不是你写的类,可以往下翻一下,找到你写的类,就是这里出现的空指针. 问题解决: 对一个空对象调用里面的方法或者 ...
- java中 enum什么意思_Java中“enum”的用途是什么?
本问题已经有最佳答案,请猛点这里访问. 所以我研究了这个"枚举"类型,在我看来它有点像一个美化的数组/ArrayList/List.它的具体用途是什么? 你觉得它是以什么样的方式排 ...
- java中的vm自变量_java中JVM虚拟机内存模型详细说明
java中JVM虚拟机内存模型详细说明 JVM的内部结构如下图: 一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求 ...
- java父类声明子类实现_java中父类声明子类实例化
问题: 1.比如两个类父类:Person 子类 Student extends Person在使用时候,这样写:Person person=null; //声明对象person=new Student ...
- java int转无符号_Java 中使用无符号整型(unsigned int)的使用方法
背景 计算机科班出身大多学过离散数学,或者理工类专业也大多学习过 C 或 C++ 语言,从中我们了解到基本类型的整形有 short.int.long 等,还分别有无符号(unsigned)和带符号(s ...
- java中组件与容器_java中的容器组件和非容器组件
1.java使用到的图形类主要在java.awt 与javax.swing包中. 2.java.awt 与 javax.swing包的区别: ① java.awt中使用的图形类都是依赖于系统的图形库的 ...
- java boolean几个字节_Java中boolean类型到底占用多少个字节?
1.时间:2017-07-03 07:37:06YuanMxy 2.问题描述:今天在复习java基础的时候发现一小问题,Java中boolean类型到底占用多少个字节? 3.问题解答: (1)什么是b ...
最新文章
- JAVA中的接口和抽象类的区别
- MVC 中的 ViewModel
- 第十章 springboot + logback
- 浅谈Struts2和Sturts1的区别
- 笔记-信息系统开发基础-CMMI过程域分类-连续式的模型
- boost::undirected_dfs用法的测试程序
- Android 中的 Context
- J-Rooms及时会议室 v4.5.5333.1104
- oracle dblink使用
- FLEX 2.01 全套下载!
- postman访问abp接口因cookies问题导致400错误
- JVM监控及诊断工具命令行篇之jhat
- 计算机添加定时启动软件,有什么软件可以让电脑定时开机?除了设定BIOS!
- 计算机无线键盘没反应,电脑连接无线键盘没反应怎么办
- 黎活明8天快速掌握android视频教程--21_监听ContentProvider中数据的变化
- 移动平台端到端低成本解决方案
- C语言入门(一):基础语法
- python给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字
- Redis与传统sql数据库的区别
- 苹果手机如何一键备份手机里的照片和视频?
热门文章
- 求助!!VC++6.0出现error c2660
- 从零开始编写Web自动化测试脚本(一)--Selenium+WebDriver环境搭建
- 【Unity踩坑记录】导航系统NavMeshAgent
- ubuntu18.04 如何设置固定IP
- android sdk 4.0 安装,Android SDK 4.0.3 安装教程
- c语言使用iconv函数实现字符编码转换
- 用户画像基础之用户画像是什么
- 【Android】[1]APP桌面图标和显示名字国际化
- 苹果a7处理器_研发了A7到A12全部处理器的芯片大牛:被苹果告倒
- c++程序设计 计蒜客 抢气球