我试图找出2的权力n。我为此使用了递归函数。
我的代码:
class TwoPowerN
{
static BigInteger twoPowern(BigInteger x, long y)
{
BigInteger temp = new BigInteger("1");
if( y == 0)
return new BigInteger("1");
temp.equals(twoPowern(x, y/2));
if (y%2 == 0)
return temp.multiply(temp);
else
return x.multiply(temp.multiply(temp));
}
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
int t = Integer.parseInt(br.readLine());
while(t>0)
{
long r = Long.parseLong(br.readLine());
BigInteger a = new BigInteger("2");
BigInteger ans=twoPowern(a,r);
pw.println(ans);
t--;
}
pw.close();
}
}
但我没有得到所需的结果。
对于1 2 3 4 5
个案,我收到2 1 2 1 2
。 “C”中的类似程序(使用类似函数但使用int)可以正常工作。
任何人都可以解释这是什么错误吗?
答案 0 :(得分:4)
我认为您需要分配递归结果,而不是测试相等性:
temp.equals(twoPowern(x, y/2)); // This is checking for equality
应该是
temp = twoPowern(x, y/2); // This is assigning the value
答案 1 :(得分:1)
temp.equals(twoPowern(x, y/2));
是java中的条件语句,而不是赋值,因此您不是 存储递归值。
答案 2 :(得分:0)
这更简单:
public class power2 {
public static long power2( int power)
{
if(power <= 0)
return 1;
return 2 * power2(power-1);
}
static BigInteger twoPowern(long y)
{
if( y == 0) {
return BigInteger.ONE;
}
return new BigInteger("2").multiply(twoPowern(y-1));
}
public static void main(String[] args)
{
for(int i = 0; i < 10; i++)
{
System.out.println("2^" + i + "," + power2(i));
System.out.println("2^" + i + "," + twoPowern(i));
}
}
}
使用常规长片或BigInteger。