jjzjj

BigInteger

全部标签

Java:将两个BigInteger对象分成一个BigDecimal对象

什么是最简单的方法,使用最少的不必要开销来划分两个BigInteger对象并将其存储在BigDecimal对象中?我一直在努力解决这个问题,但找不到任何不使用极度过量转化的方法。编辑:意识到这个问题有多么愚蠢,不过我会把它留作引用 最佳答案 您可以将BigIntegers转换为BigDecimals://bigIntXisaBigIntegerBigDecimalbigDecX=newBigDecimal(bigIntX);BigDecimalbigDecY=newBigDecimal(bigIntY);//todivide:big

java - 同时求和的最佳方法

我正在尝试计算一些大数字。为了加快计算速度,我想使用多线程。每个线程都要计算一个数,最后计算出和。我曾经看到一些与SumThread和Collector一起工作的东西,如下所示:publicBigIntegercompute(intp){Collectorc=newCollector(p);for(Telement:CollectionbigCollection){newSumThread(c){@OverrideprotectedvoiddoTheJob(){longbig=someVeryComplexCalculation(element,...);//n!receive(Big

java - `bitCount()`的 `bitLength()`和 `BigInteger`有什么区别

bitCount()的描述和bitLength()相当神秘:publicintbitCount()Returnsthenumberofbitsinthetwo'scomplementrepresentationofthisBigIntegerthatdifferfromitssignbit.Thismethodisusefulwhenimplementingbit-vectorstylesetsatopBigIntegers.Returns:numberofbitsinthetwo'scomplementrepresentationofthisBigIntegerthatdifferf

java - 如有必要,切换到 BigInteger

我正在读取一个文本文件,其中包含[1,10^100]范围内的数字。然后我对每个数字执行一系列算术运算。仅当数字超出int/long范围时,我才想使用BigInteger。一种方法是计算字符串中有多少位数字,如果太多则切换到BigInteger。否则我只会使用原始算术,因为它更快。有没有更好的办法?是否有任何原因导致Java无法自动执行此操作,即如果int太小则切换到BigInteger?这样我们就不必担心溢出。 最佳答案 我怀疑对整数和实数使用原始值的决定(出于性能原因这样做)使该选项成为不可能。请注意,Python和Ruby都会按

java - 为什么我的 Java RSA 加密会出现算术异常?

在.NET中,我生成了以下公钥文件:xTSiS4+I/x9awUXcF66Ffw7tracsQfGCn6g6k/hGkLquHYMFTCYk4mOB5NwLwqczwvl8HkQfDShGcvrm47XHKUzA8iadWdA5n4toBECzRxiCWCHm1KEg59LUD3fxTG5ogGiNxDj9wSguCIzFdUxBYq5ot2J4iLgGu0qShml5vwk=AQAB.NET很乐意使用它的常规方法进行加密。我正在尝试使用此key在Java中对字符串进行编码。当我尝试加密字符串时遇到算术异常。下面是我用来加密的代码:byte[]modulusBytes=Base64.d

java - 如何将一个非常大的数字分配给 BigInteger?

给定以下输入:453453453456465765234923423094723472394723423482304823095734957320948305712324000123123我试图通过以下方式将这些值分配给BigInteger。publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);BigIntegernum1=BigInteger.valueOf(sc.nextLong());sc.nextLine();BigIntegernum2=BigInteger.valueOf(sc.nextLong

java - 如何快速将大型 txt 文件加载到 BigInteger 中?

我正在导入一个大文本文件,1700万位长,我正在使用以下代码:BufferedReaderreader=newBufferedReader(newFileReader("test2.txt"));Stringline=reader.readLine();System.out.println("Done");BigIntegernum=newBigInteger(line);System.out.println("DoneAgain");它几乎立即加载文件并打印出'Done'但是String需要很长时间(大约一个小时)才能转换为BigInteger,我能做些什么来加快速度并快速加载号码吗

java - 将字符串编码为 Base36

目前,我正在研究一种算法,将包含每个可能字符的普通字符串编码为Base36字符串。我已经尝试了以下但它不起作用。publicstaticStringencode(Stringstr){returnnewBigInteger(str,16).toString(36);}我猜这是因为字符串不仅仅是一个十六进制字符串。如果我使用字符串“Hello22334!”在Base36中,然后我得到一个NumberFormatException。我的方法是将每个字符转换为数字。将数字转换为十六进制表示,然后将hexstring转换为Base36。我的方法是否可行,或者是否有更简单或更好的方法?

java - 返回一些负数的递归阶乘方法

这是我的阶乘方法:publicstaticlongfactorial(intnum1){if(num1这就是所谓的递归阶乘方法:for(i=0;i到目前为止一切顺利,起初输出似乎是正确的,但一些阶乘是负数而不是正数:OUTPUT:0!=11!=12!=23!=64!=245!=1206!=7207!=5,0408!=40,3209!=362,88010!=3,628,80011!=39,916,80012!=479,001,60013!=6,227,020,80014!=87,178,291,20015!=1,307,674,368,00016!=20,922,789,888,0001

java - 存储 20 位数字的数据类型

我有一个20位数的数字,哪种数据类型支持存储这个数字?我试过long,double但我超出了范围。号码=48565664968483514466然后我必须将这个数字转换为Base36以生成条形码。 最佳答案 BigInteger:BigInteger类分配尽可能多的内存来保存它被要求保存的所有数据位,并且还提供类似于Java的所有原始整数运算符和所有相关方法的操作java.lang.Math.声明为BigIntegerbi1=newBigInteger("12345678900123");