我如何将两个biginteger变量加在一起



我有两个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;
    }

最新更新