整数平方数位
Integer square digit by digit
应该有一个程序,对一个整数的每一位进行平方,然后将这些临时数字连接成一个新的整数。
我已经编写了一段代码,它可以解决我的测试用例的问题,但是自动测试器会针对一些随机生成的输入数字给出错误。
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
是一个 class,它包含任意精度的整数:
Immutable arbitrary-precision integers.
当您对超过类型 int
的最大可用范围的数字进行平方时,您的代码会出错。如果您在 long
范围以下的范围内进行测试,则 long
可以解决问题。 BigInteger
适用于任何整数。
代码应该类似于:
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"
应该有一个程序,对一个整数的每一位进行平方,然后将这些临时数字连接成一个新的整数。 我已经编写了一段代码,它可以解决我的测试用例的问题,但是自动测试器会针对一些随机生成的输入数字给出错误。
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
是一个 class,它包含任意精度的整数:
Immutable arbitrary-precision integers.
当您对超过类型 int
的最大可用范围的数字进行平方时,您的代码会出错。如果您在 long
范围以下的范围内进行测试,则 long
可以解决问题。 BigInteger
适用于任何整数。
代码应该类似于:
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"