相当容易,如果BigInteger数字是543,我希望它切断最后一位数,使其为54.
两种简单的方法可以是:
事情是,我将这个表演了很多具有当然的大整数的时候.
我的猜测是,用字符串来玩会慢一些,但是我又没有那么多地使用Bigintegers,也不知道"除法"操作有多昂贵.
速度在这里是必不可少的,实现这个的最快方法是什么(内存只是速度没问题)?
其他解决方案也欢迎.
var totalCost = Persons.Sum(x => BigInteger.Parse(x.cost.First(kv => kv.Key == "volvo").Value))
错误:
无法将lambda表达式转换为委托类型' System.Func< Persons,int >',因为块中的某些返回类型不能隐式转换为委托返回类型.
无法隐式将类型' System.Numerics.BigInteger' 转换为' int'.存在显式转换(您是否错过了演员?)
我用它OrderByDescending并且它工作正常.我能理解错误.我只是不知道要替换什么来Sum使它工作.
如何正确使用BigInteger该声明?
我一直在盯着这个代码而无法弄清楚它有什么问题,也许一副新鲜的眼睛可能有所帮助.
public static BigInteger powerOfBigInteger (BigInteger base, BigInteger power){
if (power == BigInteger.valueOf(0)){
return BigInteger.valueOf(1);
}
if (power == BigInteger.valueOf(1)){
return base;
}
BigInteger x = BigInteger.valueOf(1);
while (x != power ){
base.multiply(base);
x.add(BigInteger.valueOf(1));
System.out.println(x + " " + power);
return base;
}
return base;
Run Code Online (Sandbox Code Playgroud)
我跑了这个,显然x永远不等于力量.任何帮助表示赞赏.
当我使用Java MessageDigest来计算a的SHA-256哈希时,我遇到了一些奇怪的行为BigInteger.看来有时哈希值有256位,但有时它只有255位.这是我用来测试BigInteger散列的代码:
@Test
public void testSHA256LengthConsistent() {
MessageDigest sha256 = null;
try {
sha256 = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
Assert.fail("NoSuchAlgorithmException. Can't construct the MessageDigest.");
}
BigInteger[] tests = {new BigInteger("15902493"), new BigInteger("5189087324092341824"), new BigInteger("7153293421609183203421127438153268")};
for(BigInteger testNum : tests) {
byte[] hash = sha256.digest(testNum.toByteArray());
Assert.assertEquals(32, hash.length); //256 bits is 32 bytes
BigInteger hashedInt = new BigInteger(1, hash);
Assert.assertEquals(256, hashedInt.bitLength());
}
}
Run Code Online (Sandbox Code Playgroud)
(是的,我正在使用JUnit 4).此测试在第三个测试编号上失败,其中第二个断言失败并显示"预期256但是为255".
我将BigIntegers转换为字节数组的方式有什么问题吗?我可以为Java的MessageDigest找到的所有示例都使用它来散列字符串,而不是BigIntegers,所以我不知道是否有一种"标准"方式将BigIntegers与MessageDigest一起使用.或者,这是Java执行SHA-256的方式的错误或边缘情况,并且有一些东西与7153293421609183203421127438153268(我随机生成的数字)导致散列中的一个一个错误?
顺便说一句,我已经尝试将哈希转换为负BigInteger(使用new BigInteger(-1, hash))以查看它是否与符号位有问题,但我得到完全相同的结果.
我要实现
BigInteger.ModPow(1/BigInteger, 2,5);
Run Code Online (Sandbox Code Playgroud)
但1/BigInteger总是返回0,导致结果也是0如此.我试着BigDecimal为c#寻找一些课程,但我什么都没发现.即使没有,有什么方法可以算这个BigDecimal吗?
我正在做一些关于量化过程等的实验.
我尝试实现二进制化过程,该过程产生一个"二进制字符串",后来由xor和其他一些东西处理.
无论如何二进制化如下,其中d和u是一些可以比较的数字:
String b = "";
for (int i = 0; i < u.length; u++) {
if(d[i] < u[i]) {
b[i] += '0';
} else {
b[i] += '1';
}
}
Run Code Online (Sandbox Code Playgroud)
目前描述的我有一个字符串,每个字符为0或1.
使用a BigInteger给我一个Object,我可以将两个值相互异或:
BigInteger bi = new BigInteger(b, 2);
(...)
BigInteger result = bi.xor(other_bi);
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以实现我想要做的事情?我没找到任何东西,但也许有一个我没找到?
我解密了一个数据并获得了一个BigInt,当我尝试将其转换为字符串时,我得到了一些有线字符.
获取BigInteger的代码
BigInteger dec = process.Decrypt(sec);
Run Code Online (Sandbox Code Playgroud)
获取ByteArray的代码
byte testBy[] = dec.toByteArray();
Run Code Online (Sandbox Code Playgroud)
转换为字符串的代码
String ss = new String(testBy);
System.out.println(ss);
Run Code Online (Sandbox Code Playgroud)
我也试过这个代码
String ss = new String(testBy);
System.out.println(ss, "UTF8");
Run Code Online (Sandbox Code Playgroud)
我得到了这个输出
=^ö½ß‡k+Éæ‚ûŽ3B‚+…Òæ?&¶?kÛUô—c
Run Code Online (Sandbox Code Playgroud)
帮帮我吧
我试图用BigInteger来计算地球的质量,但实际上并没有增加一些东西.
我用来计算地球质量的公式是:M = ar2/G = 5.98×1024 kg.a是重力加速度(9.8 m/s平方),r是地球的半径((6.4)*(10 ^ 6))和Big-G((6.673)*(10 ^ -11))引力常数.
我应该得到的值是:5.97219×10 ^ 24 kg = 5,972,190,000,000,000,000,000,000,000,但我当前输出的值是:-9353.显然是一个巨大的差异,所以任何帮助将不胜感激.
这是我到目前为止所拥有的......
double bigG = (6.673) * (10^-11);
double radiusSquared = 6371^2;
double acceleration = (10^2); (obviously rounded here from 9.8)
double mass = (acceleration*radiusSquared)/bigG;
BigInteger massBig = new BigDecimal(mass).toBigInteger();
System.out.println("mass of earth: "+massBig);'
Run Code Online (Sandbox Code Playgroud)
我不确定我是否只是输入了一些输入错误,或者我是否未能识别Java的某些基础过程,因为我不熟悉Java和物理.
谢谢
好的,我做了你说的,似乎解决了部分问题......这是更新的代码:
public static void getPlanetMass(){
double bigG = (6.673) * (Math.pow(10, -11));
double radiusSquared = (Math.pow(6371, 2));
double acceleration = (Math.pow(9.8,2)); //(obviously rounded here from 9.8) …Run Code Online (Sandbox Code Playgroud) 我在Perl脚本中尝试了以下内容:
$b = 19999999999999999 % 10000000000000000;
print "$b\n";
Run Code Online (Sandbox Code Playgroud)
它输出错误0.
然后我找到一个答案说使用bignum:
use bignum;
$b = 19999999999999999 % 10000000000000000;
print "$b\n";
Run Code Online (Sandbox Code Playgroud)
它输出正确9999999999999999.
但bignum只需将所有整数常量转换为Math :: BigInt.所以我尝试了以下哪些应该与使用相同bignum:
use Math::BigInt;
$b = Math::BigInt->new(19999999999999999) % Math::BigInt->new(10000000000000000);
print "$b\n";
Run Code Online (Sandbox Code Playgroud)
但那输错了0.我在使用Math :: BigInt做错了吗?
我在Java和Python中都做了大量的数学运算.总和是相同的,但结果是不同的.
python_n1 = int(math.floor(math.pow(int((int(361) * (int(4900 + 4489))) * int(4356)), int(6))))
BigInteger Java_n1 = (x[20].multiply(x[7].add(x[15])).multiply(x[10])).pow(6);
python_simple_sum = 14764352724**6 #or math.pow(14764352724, 6)
BigInteger Java_simple_sum = new BigInteger("14764352724 ").pow(6)
Run Code Online (Sandbox Code Playgroud)
Python Answers = 10358251994780842724998096890217137953445700726699419360034816
Java Answers =10358251994780842575401275783021915748383652186833068257611776
Java正在获得正确的结果,但python不是.据我所知,我没有使用浮点数.这是什么问题.