作者:
LaLa_JUROU
,
2023-05-23 12:12:57
,
所有人可见
,
阅读 9
import java.io.*;
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
static Scanner in = new Scanner(System.in);
static String[] dp = new String[10001];
static BigInteger A,B,C = new BigInteger("2");
public static void main(String[] args) {
A = new BigInteger(in.nextLine());
B = new BigInteger("0");
char[] binary = toBinary(A).toCharArray();
for(int i = 0; i < binary.length; i ++) {
BigInteger result = new BigInteger(binary[i] + "");
result = result.multiply(new BigInteger(BinaryNumber(i + 1)));
B = B.add(result);
}
System.out.println(B.toString());
}
static String BinaryNumber(int i) {//dp优化
if(i == 1) {
dp[i] = "1";
return "1";
} else {
dp[i] = new BigInteger(dp[i - 1]).multiply(new BigInteger("2")).toString();
return dp[i];
}
}
static String toBinary(BigInteger A) {
StringBuilder binary = new StringBuilder();
while(A.toString().length() > 1 || !A.toString().equals("0")) {
binary.append(A.divideAndRemainder(C)[1]);
A = A.divide(C);
}
return binary.reverse().toString();//反转加转换为字符串
}
}