我有两个BigInteger变量“e”和“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;
}
}
UPDATE 尝试过注释中给出的方法,但转换为使用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;
}
答案 0 :(得分:1)
由于所显示的努力,用于乘以第一个数字的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);
}
答案 1 :(得分:0)
如果您只想连接两个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;
}
但是如果你想对这些数字进行操作,你可以直接这样做。无需转换。
答案 2 :(得分:0)
由于其他答案已经集中在String Concatenation上,让我给你另一个不涉及String Concatenation的答案。您可以取第一个数字的位数,将第一个数字乘以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
答案 3 :(得分:0)
我最后通过转换为字符串并使用字符串缓冲区来实现这一点,因为BigInteger的大小。然后我将其保留为String,因为我想将其写入文件,但我可以使用内容变量恢复为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;
}