Java 逐位整数平方
应该有一个程序,它将一个整数的每个数字平方,然后将这些临时数字连接成一个新的整数。 我已经编写了一个代码,它可以实现与我的测试用例相关的技巧,但是一个自动测试仪会为一些随机生成的输入数字提供错误Java 逐位整数平方,java,square,Java,Square,应该有一个程序,它将一个整数的每个数字平方,然后将这些临时数字连接成一个新的整数。 我已经编写了一个代码,它可以实现与我的测试用例相关的技巧,但是一个自动测试仪会为一些随机生成的输入数字提供错误 public class SquareDigit { public int squareDigits(int n) { int tmp = 0; String returnvalue=""; while(n > 0) { tmp = n % 10;
public class SquareDigit {
public int squareDigits(int n) {
int tmp = 0;
String returnvalue="";
while(n > 0) {
tmp = n % 10;
tmp = tmp * tmp;
returnvalue = returnvalue + Integer.toString(tmp);
n /= 10;
}
int result=Integer.parseInt(returnvalue);
return result;
}
}
使用BigInteger。
A是一个包含任意精度整数的类:
不可变的任意精度整数
当对超过最大可用范围的类型int
的数字进行平方运算时,代码会出错。如果在long
范围下的范围内进行测试,则long
可以解决问题。biginger
适用于任何整数
代码应该类似于:
public BigInteger squareDigits(int n) {
BigInteger tmp = null;
String returnvalue = "";
while (n > 0) {
tmp = BigInteger.valueOf(n % 10);
tmp = tmp.pow(2);
returnvalue = returnvalue + String.valueOf(tmp);
n /= 10;
}
return new BigInteger(returnvalue);
}
...
System.out.println(squareDigits(123456789)); // Print 816449362516941
使用BigInteger。
A是一个包含任意精度整数的类:
不可变的任意精度整数
当对超过最大可用范围的类型int
的数字进行平方运算时,代码会出错。如果在long
范围下的范围内进行测试,则long
可以解决问题。biginger
适用于任何整数
代码应该类似于:
public BigInteger squareDigits(int n) {
BigInteger tmp = null;
String returnvalue = "";
while (n > 0) {
tmp = BigInteger.valueOf(n % 10);
tmp = tmp.pow(2);
returnvalue = returnvalue + String.valueOf(tmp);
n /= 10;
}
return new BigInteger(returnvalue);
}
...
System.out.println(squareDigits(123456789)); // Print 816449362516941
使用
returnvalue=Integer.toString(tmp)+returnvalue代码>
而不是
returnvalue=returnvalue+Integer.toString(tmp)代码>
您从后向前迭代数字,例如,对于输入123
,中间结果应为
“9”
“49”
“149”
但在你的代码中它是
“9”
“94”
“941”
使用
returnvalue=Integer.toString(tmp)+returnvalue代码>
而不是
returnvalue=returnvalue+Integer.toString(tmp)代码>
您从后向前迭代数字,例如,对于输入123
,中间结果应为
“9”
“49”
“149”
但在你的代码中它是
“9”
“94”
“941”
问题可能是由于整数精度,请使用long或BigInteger@Sanjeev我猜这是由于整数溢出造成的。问题可能是由于整数精度,请使用long或BigInteger@Sanjeev我猜这是由于Integeroverflow造成的;我已经导入了它,但它是一个测试环境,所以这可能会导致导入出现问题。不,没有问题。您需要在每个显式使用BigInteger的类中导入它。@KovacsAkosBigInteger tmp=0代码>,您不能将int
分配给biginger
,请使用它的构造函数。请参阅更新的答案。您将看到如何构造BigInteger以及如何生成平方;我已经导入了它,但它是一个测试环境,所以这可能会导致导入出现问题。不,没有问题。您需要在每个显式使用BigInteger的类中导入它。@KovacsAkosBigInteger tmp=0代码>,您不能将int
分配给biginger
,请使用它的构造函数。请参阅更新的答案。您将看到如何构造BigInteger和如何生成平方。这非常有趣,因为它使用预定义的测试值。谢谢这真的很有趣,因为它使用预定义的测试值。谢谢