整数平方数位

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"