Как объединить две переменные BigInteger вместе? - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть две переменные 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 голосов
/ 28 апреля 2018

Я сделал это в конце, преобразовав строку и используя строковый буфер из-за размера 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;

    }
0 голосов
/ 26 апреля 2018

Поскольку другие ответы уже были посвящены конкатенации строк, позвольте мне дать вам еще один ответ, не связанный с конкатенацией строк. Вы можете взять количество цифр первого числа, умножить первое число на 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
0 голосов
/ 27 апреля 2018

Из-за приложенного усилия 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);
}
0 голосов
/ 26 апреля 2018

Если вы просто хотите объединить две 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;
}

Но если вы хотите выполнять операции с числами, вы можете сделать это напрямую. Нет необходимости в конвертации.

...