Java实现大数乘法运算
基本思路:将输入的两个大数以字符串的形式存储,然后转化成整型数组存储,通过整型数组进行乘法运算(采用分治的思想)
即乘法分配律,如AB*CD=AC(AD+BC)BD,将两个数组逐位相乘的结果对位存放在新的数组里,再对新数组进行进位判定,进位结束后将新数组转化成字符串输出。
实现代码如下:
import java.util.Scanner; //创建类largenumberOperationMultiply
public class largenumberOperationMultiply { //定义方法multiply的功能
public String multiply(String str1,String str2){
int[] num1 = new int[str1.length()];
int[] num2 = new int[str2.length()];
int[] result = new int[str1.length() + str2.length()]; //将两个字符串转成整型数组,顺序转换,数组下标越小,数字对应的位数越高
for (int i = 0;i < str1.length(); i++){
num1[i] = Integer.parseInt(str1.substring(i,i+1));
}
for (int i = 0;i < str2.length(); i++){
num2[i] = Integer.parseInt(str2.substring(i,i+1));
} //两大数相乘
for (int a = 0;a < str1.length(); a++){
for (int b = 0;b < str2.length(); b++){
result[a+b] += num1[a]*num2[b];
}
} ////判断是否需要进位,满10进1,因为存储顺序与位数高低相反,所以采用逆序进位
int temp;
for (int k = result.length-1; k > 0; k--){
temp=result[k]/10; //数组下标大的向数组下标小的进位
result[k-1] += temp;
result[k] = result[k]%10;
} //将结果数组逆序转化为字符串
String resultstr = "";
for (int i = 0; i < result.length-1; i++){
resultstr += "" + result[i];
} return resultstr;
} public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数:");
String str1 = sc.next();
System.out.println("请输入第二个数:");
String str2 = sc.next();
largenumberOperationMultiply bn = new largenumberOperationMultiply();
//创建类largenumberOperationMultiply的对象bn
String output = bn.multiply(str1,str2);
//bn对象调用multiply方法对str1和str2进行操作
System.out.println(str1+"与"+str2+"的积为="+output);
}
}
Java实现大数乘法运算的更多相关文章
- HDU 5686 斐波那契数列、Java求大数
原题:http://acm.hdu.edu.cn/showproblem.php?pid=5686 当我们要求f[n]时,可以考虑为前n-1个1的情况有加了一个1. 此时有两种情况:当不适用第n个1进 ...
- Java BigInteger(大数,ACM比赛专用)
用c或者C++处理大数比较麻烦,于是决心学习一下JAVA中大数运算. 先下载一个eclipse,具体的用法去问度娘吧 JAVA中有两个类BigInteger和BigDecimal分别表示大整数类和大浮 ...
- Java的大数操作分为BigInteger和BigDecimal
Java的大数操作分为BigInteger和BigDecimal,但这两给类是分开使用的,有时候在编程的时候显得略微繁琐,现在编写了一个将二者合二为一的大数操作类. 大数操作类代码如下: 1 pack ...
- JAVA解决大数
主题链接:CLICK HERE~ 有了Java求解大数变得如此简单,以后再也不用操心大数模板了.哦啦啦啦. import java.math.BigInteger; import java.math. ...
- 用Java进行大数处理(BigInteger)-hdu1042
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1042 题目描述: 代码实现: import java.util.Scanner; import jav ...
- Java中大数的使用与Java入门(NCPC-Intergalactic Bidding)
引入 前几天参加湖南多校的比赛,其中有这样一道题,需要使用高精度,同时需要排序,如果用c++实现的话,重载运算符很麻烦,于是直接学习了一发怎样用Java写大数,同时也算是学习Java基本常识了 题目 ...
- UVA10862 - Connect the Cable Wires(递推 + java的大数)
UVA10862 - Connect the Cable Wires(递推 + java的大数) 题目链接 题目大意:给你n座房子位于一条直线上,然后仅仅给你一个cable service.要求每座房 ...
- HDU 4873 ZCC Loves Intersection(JAVA、大数、推公式)
在一个D维空间,只有整点,点的每个维度的值是0~n-1 .现每秒生成D条线段,第i条线段与第i维度的轴平行.问D条线段的相交期望. 生成线段[a1,a2]的方法(假设该线段为第i条,即与第i维度的轴平 ...
- java版大数相乘
在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 http://blog.csdn.net/jianzhibeihang/article/details/4948267 用j ...
随机推荐
- jQuery实现单击某个标签改变样式
1.HTML代码,如下图: <p class="sc_member_recharge_form"> <span class="selected" ...
- 在写php项目时 修改外部css或js文件没有效果
原因是:浏览器的自动缓存机制导致的. 这是因为浏览器会自动缓存静态文件以加快访问速度,所以这就导致浏览器将不会再接收静态文件了 解决办法是 使用ctrl+F5 —— 传说中的完全刷新,会删掉所有本地临 ...
- Python基础知识5-递归函数、生成器
函数执行流程* 递归Recursion 递归的性能 递归总结 递归练习: def fac(n): if n==1: return n return n*fac(n-1) def fac1(n, f= ...
- linux的挂载含义
Linux下,mount挂载的作用,就是将一个设备(通常是存储设备)挂接到一个已存在的目录上.访问这个目录就是访问该存储设备.linux操作系统将所有的设备都看作文件,它将整个计算机的资源都整合成一个 ...
- block,inline,inline-block区别
block:多個元素豎直排列,每個元素單獨占一行,寬高可以設置,padding.margin可以設置: inline:多個元素占一行,一行放不下了,才轉入下一行,寬高不能設置,水平的padding.m ...
- js 实现论坛评论模块原理
<body> <table id="tb" border="1"> <tbody id="tbd"&g ...
- linux服务端日志中截取自己所需要的部分
近期开发一个图片处理的业务,涉及base64字符串解析的问题,为方便与友商间接口调试,日志中保存Base64.日,想想就肝儿疼,记录下来容易,取的时候难.为准确提取,配合两条命令即可. 1.获取日志所 ...
- git仓库构建小记
1.新建 .git 文件夹 约定的文件目录下,新建 .git 文件夹 mkdir test.git 2.初始化服务端仓库 git init --bare test.git 此时进入 test.git ...
- Codeforces Global Round 2
A:答案一定包含首位或末位. #include<iostream> #include<cstdio> #include<cmath> #include<cst ...
- Python之——CentOS 6.5安装Python2.7.14
Python之——CentOS 6.5安装Python2.7.14 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/l1028386804/art ...