我有两个biginteger变量" e"one_answers" n",我想将它们串联为" en"。我该怎么做?
我需要先转换为字符串,然后返回BigInteger?
我的代码从另一类设置变量。
public class Key {
public BigInteger getN() {
return n;
}
public void setN(BigInteger n) {
this.n = n;
}
public BigInteger getE() {
return e;
}
public void setE(BigInteger e) {
this.e = e;
}
public BigInteger getD() {
return d;
}
public void setD(BigInteger d) {
this.d = d;
}
public BigInteger e;
public BigInteger n;
public BigInteger d;
public BigInteger publickeyconcat() {
BigInteger myval = (e + n);
return myval;
}
public BigInteger privatekeyconcat(){
BigInteger myval2 = e;
return myval2;
}
}
更新已经尝试了评论中给出的方法,但是当转换以使用E和N而不是Number1和Number2时,它不会将它们凝结在一起。
public BigInteger publickeyconcat() {
BigInteger ten=new BigInteger("10");
BigInteger myval=(e.multiply(ten.pow((int)(Math.floor(Math.log10(e.doubleValue()) + 1)))).add(n));
return myval;
}
由于所显示的努力,用于乘以第一个数字的10的功率可以如下:
:public static BigInteger concat(BigInteger x, BigInteger y)
{
int ndigits = y.bitLength() * 3 / 10; // Guessed number of digits using 2^10 ≈ 10^3.
BigInteger pow10 = BigInteger.TEN.pow(ndigits);
while (pow10.compareTo(y) > 0) {
pow10 = pow10.divide(BigInteger.TEN);
}
while (pow10.compareTo(y) <= 0) {
pow10 = pow10.multiply(BigInteger.TEN);
}
// Cheating: int ndigits = y.toString().length();
return x.multiply(pow10).add(y);
}
由于其他答案已经专注于字符串串联,让我给您另一个答案,而不涉及字符串串联。您可以将第一个数字的数字数,用10^(否数字(乘以第一个数字,然后添加第二个数字。一个粗糙的例子如下,
BigInteger ten=new BigInteger("10");
BigInteger number=new BigInteger("1234");
BigInteger number2=new BigInteger("5678");
BigInteger newBigInt=(number.multiply(ten.pow((int)(Math.floor(Math.log10(number.doubleValue()) + 1)))).add(number2));
System.out.println(newBigInt); //would print 12345678
如果您只想加入两个BigInteger
变量,则可以这样做:
public BigInteger publickeyconcat(BigInteger e, BigInteger n) {
String a = String.valueOf(e);
String b = String.valueOf(n);
String val = a + b;
BigInteger myval = new BigInteger(val);
return myval;
}
但是,如果您想使用数字进行操作,则可以直接执行此操作。不需要转换。
我最终通过转换为字符串并使用字符串缓冲区而做到这一点,这是由于BigInteger的大小。然后,我想将其写入文件,但我可以使用内容变量将其写入BigInteger。
。public String publickeyconcat() {
String str = String.valueOf(e);
StringBuffer tmp = new StringBuffer(str);
tmp.append(n);
str = tmp.toString();
BigInteger content = new BigInteger(str);
return str;
}