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的类中导入它。@KovacsAkos
BigInteger tmp=0,您不能将
int
分配给
biginger
,请使用它的构造函数。请参阅更新的答案。您将看到如何构造BigInteger以及如何生成平方;我已经导入了它,但它是一个测试环境,所以这可能会导致导入出现问题。不,没有问题。您需要在每个显式使用BigInteger的类中导入它。@KovacsAkos
BigInteger tmp=0,您不能将
int
分配给
biginger
,请使用它的构造函数。请参阅更新的答案。您将看到如何构造BigInteger和如何生成平方。这非常有趣,因为它使用预定义的测试值。谢谢这真的很有趣,因为它使用预定义的测试值。谢谢