- 浏览: 53447 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
virtual_function:
你确定啊 ?
关于JAVA ZIP追加新文件问题 -
bannamoon:
dongbiying 写道 帮我一大忙!不过,怎么没有说明要 ...
java读取excel -
dongbiying:
帮我一大忙!不过,怎么没有说明要jar呀!呵呵
java读取excel
public class Mutiply { public static void main(String[] args) { BigInteger multiplier = new BigInteger("-673589893565890368590578967285490682958485023495834902583490589345798583495723487563482756347856673589893565890368590578967285490682958485023495834902583490589345798583495723487563482756347856"); BigInteger multiplicand = new BigInteger("-859085903425878805823409584039269057908349673285902345849035890878809586908504397562358476278584376328590385689457043257834927534095734956347853485"); long st1 = System.currentTimeMillis(); for(int index=0;index<1000;index++){ multiply(multiplier, multiplicand); } System.out.println(System.currentTimeMillis()-st1); long st2 = System.currentTimeMillis(); for(int index=0;index<1000;index++){ multiplier.multiply(multiplicand); } System.out.println(System.currentTimeMillis()-st2); } public static String multiply(BigInteger multiplier, BigInteger multiplicand){ boolean isResultNegative = false; if(multiplier.signum()==0 || multiplicand.signum()==0){ return "0"; } if(multiplier.signum()==-1 || multiplicand.signum()==-1){ if(!(multiplier.signum()==-1 && multiplicand.signum()==-1)){ isResultNegative = true; } } return (isResultNegative?"-" : "") + multiply(multiplier.toString().replace("-", ""), multiplicand.toString().replace("-", "")); } public static String multiply(String multiplier, String multiplicand){ if(multiplier.length()>multiplicand.length()){ String temp = multiplier; multiplier = multiplicand; multiplicand = temp; } int length = multiplicand.length()+multiplier.length(); char[] result = new char[length]; for(int indexOfResult=0;indexOfResult<result.length;indexOfResult++){ result[indexOfResult] = '0'; } String[] tempResults = new String[multiplier.length()]; for(int indexOfMultiplier=0;indexOfMultiplier<multiplier.length();indexOfMultiplier++){ char[] tempResult = new char[length]; for(int indexOftempResult=0;indexOftempResult<tempResult.length;indexOftempResult++){ tempResult[indexOftempResult] = '0'; } int singleMultiplier = Integer.valueOf(String.valueOf(multiplier.charAt(multiplier.length()-1-indexOfMultiplier))); if(singleMultiplier!=0){ int singleStep = 0; for(int indexOfmultiplicand=0;indexOfmultiplicand<multiplicand.length();indexOfmultiplicand++){ int singleMultiplicand = Integer.valueOf(String.valueOf(multiplicand.charAt(multiplicand.length()-1-indexOfmultiplicand))); int singleResult = singleStep + singleMultiplier*singleMultiplicand; singleStep = singleResult/10; tempResult[tempResult.length-indexOfMultiplier-indexOfmultiplicand-1] = (""+singleResult%10).charAt(0); } tempResult[tempResult.length-indexOfMultiplier-multiplicand.length()-1] = ("" + singleStep).charAt(0); } tempResults[indexOfMultiplier] = String.valueOf(tempResult); } int step = 0; for(int indexOfResult=0; indexOfResult<length; indexOfResult++){ int multiResult = step; for(int indexOfTempResults=0;indexOfTempResults<tempResults.length;indexOfTempResults++){ multiResult += Integer.valueOf(String.valueOf(tempResults[indexOfTempResults].charAt(length-1-indexOfResult))); } step = multiResult/10; result[result.length-indexOfResult-1] = (""+multiResult%10).charAt(0); } return String.valueOf(result); } }
结果对比:
578671582252594476786199322413773832540849019479781209035507587576779550181736165461400001640216752920490028498890769204733283108280630943510991915921171610703486725119777750465131309033130699124992461394973593046143133767470798477438073390294712136103115909945569596014299669909031490482950743553619069179063137722898136350387343581878160 578671582252594476786199322413773832540849019479781209035507587576779550181736165461400001640216752920490028498890769204733283108280630943510991915921171610703486725119777750465131309033130699124992461394973593046143133767470798477438073390294712136103115909945569596014299669909031490482950743553619069179063137722898136350387343581878160
虽然结果一致,但由于本人实现方式不算优,性能比JAVA默认的BigInteger实现整数相乘性能差很多,尤其是在计算遍数多的情况下。不是一个数量级的。
发表评论
-
java io重定向System.out,System.err屏蔽程序调试信息
2012-01-11 17:01 1132来源于java io犀牛书籍系列。 1,先定义空实现输出类一枚 ... -
iconst
2011-12-05 15:31 7980~5 iconst; -1 iconst_m1 -
Spring属性文件加密
2011-04-20 14:24 851使用Spring时,一般使用 <context:prop ... -
myeclipse ant打包 Could not find the main class. Program will exit
2011-04-14 09:16 1296情况1:myeclipse ANT设置不正确。 解决:重新设置 ... -
面向关系编程
2011-04-05 20:46 788写在前面的话。该文章用于记录当时的一些面向对象的思考。 目前的 ... -
数据结构学习之二叉树
2011-04-03 14:39 847TreeNode.java public class Tr ... -
关于POI导出EXCEL写入多个数据有效性验证
2011-03-29 17:22 2006建立多个HSSFDataValidation //POI ... -
JAVA三种解析方式解析XML
2011-03-22 12:48 1080JAVA中存在三种方式解析XML。例中代码未进行异常捕捉。 1 ... -
JFreeChart饼图取消图中标签
2011-03-10 12:30 1031//创建圆饼图 JFreeChartchart=Char ... -
ProGuard代码混淆及Spring框架时找不到利用注解获取的bean
2010-09-19 10:39 5229ProGuard代码混淆及Spring框架时找不到利用注解获取 ... -
Java字节码查看器及反编译工具
2010-08-27 17:39 1172两个工具见附件! -
JAVA JNI调用本地方法
2010-08-07 12:49 919声明Native方法: package cn.com.sk ... -
JAVA 自定义Annotation(注解)
2010-08-07 00:33 964注解接口隐式的继承java.lang.annotation.A ... -
关于JAVA ZIP追加新文件问题
2010-08-04 22:45 2528JAVA中ZipOutputStream是不支持直接向原.zi ... -
java泛型
2010-08-03 15:57 836Java泛型只是在编译器将[类型变量]都替换成了Object类 ... -
JAVA 正则表达式 贪心与非贪心
2010-04-22 20:23 3286java正则表达式中默认的是贪心匹配。如果要实现非贪心匹配,需 ... -
JAVA写excel
2010-04-17 08:10 1037在用JXL写入EXCEL文件时遇到一个比较奇怪的问题。例如每次 ... -
java读取excel
2010-04-17 08:02 1742JDK1.5 JXL1.4 JXL如果版本与JDK不兼容造成读 ...
相关推荐
然而,如果要手动实现大整数相乘的算法,一种经典的解决方案是Karatsuba算法,它是一种分治策略的高效乘法算法。对于两个n位的数字,传统的乘法算法需要O(n^2)的时间复杂度,而Karatsuba算法只需O(n^1.585),在处理...
在编程领域,处理大数(任意大的整数)相乘是一项常见的挑战,特别是在算法竞赛、数学计算或金融计算中。这种操作通常涉及到超出标准整数类型(如int或long)范围的数字。以下是对“任意大的两个数相乘”这个知识点...
任意正整数都能拆成若干唯一的2的幂指数之和,php版本和js版本都有。
阶乘是将一个正整数n与小于等于它的所有正整数相乘的结果,例如5! = 5 × 4 × 3 × 2 × 1 = 120。这个函数使用递归方式计算阶乘,当n等于1或0时返回1,否则返回n乘以n-1的阶乘。 2. `print(int n, int m)` 函数:...
"JAVA大数相乘"这个主题主要涉及到Java中的`BigInteger`类,它提供了对任意精度整数的支持,能够有效地处理大数运算,包括加法、减法、乘法、除法以及更复杂的数学操作。`BigInteger`类是Java标准库`java.math`包的...
在本文中,我们将介绍一种使用 Java 实现的超大整数阶乘算法代码详解,采用“数组进位”算法来解决超大整数的阶乘问题。 首先,让我们来了解一下什么是阶乘。阶乘是一个数学运算符,表示一个数的所有正整数因子相乘...
在Java中,我们可以使用字符串来存储这些大数,因为字符串可以容纳任意长度的数字序列。在提供的代码示例中,`BigNumber` 类实现了这个功能。 代码的核心在于 `bigNumberMultiply` 方法,它接收两个字符串参数,...
`BigDecimal`是Java提供的一个用于进行任意精度的十进制运算的类,它可以避免浮点数运算的精度问题。以下是使用`BigDecimal`的示例代码: ```java import java.math.BigDecimal; import java.math.RoundingMode; ...
本项目提供的"Java计算阶乘 源代码"旨在帮助我们实现任意整数的阶乘计算。首先,我们需要理解什么是阶乘。阶乘是将一个正整数n与小于它的所有正整数相乘的结果,表示为n!。例如,5! = 5 × 4 × 3 × 2 × 1 = 120。...
在实际编程中,很多编程语言提供了内置的大数库,如Python的`decimal`和`fractions`模块,Java的`BigInteger`类,C++的GMP库等,它们实现了上述算法并提供了方便的API供开发者使用。在编写代码时,理解这些算法的...
这种算法将每个大整数分解成若干个单个的数字,然后逐位相乘并累加结果。但由于这种方法的时间复杂度较高,对于非常大的整数并不高效。 一种更高效的算法是Karatsuba算法,由苏联数学家Alexey Karatsuba在1960年...
正大整数的引入就是为了解决这个问题,它可以表示任意大小的整数。 2. **正大整数的数据结构**: 大多数实现正大整数的方式是通过数组或链表存储一系列较小的整数(通常是字节或短整型),这些小整数组合起来表示...
对于任意两个正整数a和b,它们的最小公倍数LCM(a, b)是能够同时被a和b整除的最小正整数。 为了求解1至20的所有整数的最小公倍数,我们可以考虑以下步骤: 1. **分解质因数**:首先将1至20中的每个数字分解为质因数...
### Java练习题知识点详解 #### 1. 斐波那契数列 - **知识点**:斐波那契数列是一种常见的数学...以上练习题涵盖了Java编程语言的多个方面,包括基础语法、数据结构、算法实现等,适合不同程度的Java学习者进行练习。
总的来说,使用链表表示大数并实现加减乘运算,可以灵活地处理任意大小的整数,而无需受制于固定大小的数据类型。这种实现方式不仅有助于理解大数计算的原理,而且在实际编程中也有很高的实用性。通过不断优化算法,...
当两个大整数相乘的结果超过这些类型的表示范围时,我们需要采用专门的大数运算库或者自定义算法来处理这种运算。 1. **大数运算库**:许多编程语言提供了支持大数运算的库,例如Python的`decimal`和`fractions`...
提供的Java代码示例中,`Demo4矩阵相乘`类实现了这个算法。首先通过`Scanner`类读取输入的矩阵信息,然后创建两个三元组数组`a[]`和`b[]`来存储矩阵A和B的非零元素。接下来,遍历这两个数组,执行上述步骤计算矩阵...
- 大整数乘法:如Karatsuba乘法和Toom-Cook乘法,将大整数分解后相乘,降低计算复杂度。 - 快速幂运算:高效求解a的n次方,通过反复平方和乘法实现。 7. 回溯法: - 搜索问题:如八皇后问题、数独问题,通过尝试...
- 将一个正整数分解成若干个质数相乘的形式,这些质数被称为该数的质因数。 - 分解质因数的过程通常从最小的质数开始尝试。 #### Java实现 - **递归分解**:使用递归函数逐步分解整数,每次找到最小的质数因子,...
对于一个正整数n,将其分解成若干个质数相乘的形式。 #### 示例代码分析: 示例代码提供了一种分解质因数的方法: ```java public void fengjie(int n) { for (int i = 2; i ; i++) { if (n % i == 0) { System....