如何将两个BigInteger变量连接在一起?

时间:2018-04-26 17:46:03

标签: java concatenation biginteger

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

4 个答案:

答案 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;

    }