我被困在代码的这一部分上。我有一个存储在输入中的字符串。
String input = ("831346848 2162638190 2014846560 1070589609 326439737");
该字符串包含长整数。我试图通过将每个长整数转换为BigInteger来实现它们。例如,从字符串中,我需要这样做:
BigInteger bi1= new BigInteger("831346848");
等等。输入字符串非常长,所以我需要把它放在某种循环中。在我暂时将它存储到bi1后,我需要执行b1.modPow(exp,mod)。然后对字符串中的每个长整数重复这些步骤。那部分我理解,但我困惑的部分是如何将输入字符串放在循环中,以便将它存储在bi1中。
长整数用空格分隔,字符串中的每个长整数都是不同的长度。
实施此方法的最佳方法是什么?
答案 0 :(得分:6)
Java-8方式
List<BigInteger> bigIntegers = Stream.of(input.split(" "))
.map(BigInteger::new)
.map(bi -> bi.modPow(exp, bi))
.collect(Collectors.toList());
答案 1 :(得分:5)
按space
拆分字符串,并将其存储在List
BigInteger
String input = "831346848 2162638190 2014846560 1070589609 326439737";
List<BigInteger> bigIntegerList = new ArrayList<BigInteger>();
for(String value : input.split("\\s")){
bigIntegerList.add(new BigInteger(value));
}
答案 2 :(得分:1)
试
String nums [] = input.split (" ");
for (String num : nums) {
BigInteger bi1= new BigInteger(num);
// do whatever
}
答案 3 :(得分:1)
BigInteger bi1;
for (String sbigint : input.split(" ")) {
BigInteger b1 = new BigInteger(sbigint);
bi1 = b1.modPow(exp, mod);
}
您描述的问题似乎遗漏了某些内容,bi1
的方式将包含字符串中最后一个长整数的结果modPow
。
答案 4 :(得分:0)
你需要一个像“\ s +”这样的正则表达式,这意味着:只要遇到至少一个空格,就会拆分。完整的Java代码是:
try {
List<BigInteger> bigList = new ArrayList<BigInteger>();
for(String subStr : input.split("\\s+")){
bigList.add(new BigInteger(subStr));
}
} catch (Exception ex) {
//
}
如果您愿意,如果只有一个空格,您可以避免在“\ s +”中使用“+”符号,但这不是必需的。