- 浏览: 51591 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1077来源于java io犀牛书籍系列。 1,先定义空实现输出类一枚 ... -
iconst
2011-12-05 15:31 7550~5 iconst; -1 iconst_m1 -
Spring属性文件加密
2011-04-20 14:24 814使用Spring时,一般使用 <context:prop ... -
myeclipse ant打包 Could not find the main class. Program will exit
2011-04-14 09:16 1248情况1:myeclipse ANT设置不正确。 解决:重新设置 ... -
面向关系编程
2011-04-05 20:46 756写在前面的话。该文章用于记录当时的一些面向对象的思考。 目前的 ... -
数据结构学习之二叉树
2011-04-03 14:39 818TreeNode.java public class Tr ... -
关于POI导出EXCEL写入多个数据有效性验证
2011-03-29 17:22 1949建立多个HSSFDataValidation //POI ... -
JAVA三种解析方式解析XML
2011-03-22 12:48 1033JAVA中存在三种方式解析XML。例中代码未进行异常捕捉。 1 ... -
JFreeChart饼图取消图中标签
2011-03-10 12:30 993//创建圆饼图 JFreeChartchart=Char ... -
ProGuard代码混淆及Spring框架时找不到利用注解获取的bean
2010-09-19 10:39 5184ProGuard代码混淆及Spring框架时找不到利用注解获取 ... -
Java字节码查看器及反编译工具
2010-08-27 17:39 1136两个工具见附件! -
JAVA JNI调用本地方法
2010-08-07 12:49 890声明Native方法: package cn.com.sk ... -
JAVA 自定义Annotation(注解)
2010-08-07 00:33 929注解接口隐式的继承java.lang.annotation.A ... -
关于JAVA ZIP追加新文件问题
2010-08-04 22:45 2436JAVA中ZipOutputStream是不支持直接向原.zi ... -
java泛型
2010-08-03 15:57 803Java泛型只是在编译器将[类型变量]都替换成了Object类 ... -
JAVA 正则表达式 贪心与非贪心
2010-04-22 20:23 3228java正则表达式中默认的是贪心匹配。如果要实现非贪心匹配,需 ... -
JAVA写excel
2010-04-17 08:10 1001在用JXL写入EXCEL文件时遇到一个比较奇怪的问题。例如每次 ... -
java读取excel
2010-04-17 08:02 1701JDK1.5 JXL1.4 JXL如果版本与JDK不兼容造成读 ...
相关推荐
JAVA实现的两个特大整数相乘的算法,可以达到1000位数相乘。
java写的大整数乘法 可以计算很大的整数
对一般的大整数有效,不支持负数;只供各位参考
程序演示了两个任意长度的正整数相乘,采用了数组来实现。欢迎各位探讨!
超大整数相乘算法的VB实现源代码超大整数相乘算法的VB实现源代码
大整数相乘,仅作参考。利用竖式的。不是分治算法的喔。
分治法求两个大整数相乘C++实现。
此代码是使用verilog实现任意的整数分频,通过更改参数即可实现,包括testbench验证代码功能
该程序能够真正实现两个任意大的整数相乘,对输入的数没有长度限制,其基本思想使用链表实现。仅供参考。
自己写的大整数相乘算法,算法里包含有大整数相加算法。
是算法分析中的一个实验 用数组实现 用二重循环控制按位交叉相乘
在计算机语言中,整数最大可以设置为unsigned long类型的,但是表示有限,当涉及到两个大整数相乘的时候,会出现不能表示的情况,鉴于此编制此算法予以解决大整数相乘。本程序使用分治法实现,将n位二进制整数X和Y都...
java任意正整数取出每位数,就一句话,需要的就来看看吧。
大整数相乘问题利用分而治之算法--来源于平时的作业
任意进制整数的转换,用十进制数作为中转,原则上不能超过10进制数能表示的最大整数。
实现任意整数分频的VHDL代码实现任意整数分频的VHDL代码实现任意整数分频的VHDL代码
自己用C++写的一个整数相加相乘的控制台程序,用字符串来实现任意位数的整数之间的相加和相乘,通过string和int的相互转化达到我们正常计算时候的过程,不受整型规定字节数的影响,刚兴趣的朋友可以参考,有什么问题...
分治法 两个大整数相乘(十进制的)大整数相乘C++源码.cpp
用递归分治的方法实现大整数相乘,解决了超出计算机表达范围的整数相乘问题,为了减小文件大小仅上传.cpp文件
本程序实现两个100位以内的大整数相乘的算法。 大家可以借鉴一下,如果可以再改进一下就更好了。