gpt4 book ai didi

java - 将值添加到列表并转换为 BigInteger - Java

转载 作者:行者123 更新时间:2023-12-01 17:47:42 24 4
gpt4 key购买 nike

我正在编写一个代码,用于确定最小整数,该整数是一个由 7 组成的序列,后跟一些可以被 int n 整除的零(可能没有)。 。由于这个数字可能很大,因此返回值应该是 BigInteger .

到目前为止,我的代码有一个 if-else 梯子,涵盖了以下情况:如果有 int n不能被二或五整除,保证只包含七(没有零)。在 int n 的情况下不能被二或五整除,我的思考过程是继续在 while 循环中将七添加到 LinkedList,直到该列表(转换为 BigInteger)可以被 int n 整除。 。同样的逻辑也适用于 int n 的情况。可以被二或五整除,但两个 for 循环会在列表中添加七和零。

我的代码在将列表转换为字符串然后转换为 BigInteger 时出现运行时错误,具体就行BigInteger numBig = new BigInteger(str); 。错误是:“java.lang.NumberFormatException:零长度 BigInteger(在 java.math.BigInteger 中)” 另外,我不太确定 int n 的情况逻辑是否合理。能被二或五整除。

最佳答案

您不需要 BigInteger 来完成此任务。想法如下:

  • 首先确定所需零的数量。由于仅由 7 组成的数字不能被 2 或 5 整除,因此 0 的数量等于数字 n 中 2 或 5 的最大幂。

  • 现在我们有一个数字n,它不能被2或5整除。假设一个由m七组成的数字除以余数n 等于 r:

777...m-times..777 mod n = r

那么由 (m+1) 个七组成的数字将有余数 10*r + 7,因为

777..(m+1)-times...777 = 777...m-times...7 * 10 + 7 

所以你可以重新计算余数,直到它变为零。

public static BigInteger method(int n) {
int two;
for (two = 0; n % 2 == 0; two++) n /= 2;
int five;
for (five = 0; n % 5 == 0; five++) n /= 5;
int zeros = Math.max(two, five);
int sevens = 1;
int r = 7 % n;
while (r != 0) {
r = (r * 10 + 7) % n;
sevens++;
}
// Now just make a number of 'sevens' sevens and 'zeros' zeros:
StringBuilder result = new StringBuilder();
for (int i = 0; i < sevens; i++) {
result.append("7");
}
for (int i = 0; i < zeros; i++) {
result.append("0");
}
return new BigInteger(result.toString());
}

关于java - 将值添加到列表并转换为 BigInteger - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60836615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com