日期:2014-05-20  浏览次数:20721 次

请问一下这段代码怎样优化内存空间,杭电2100显示Memory Limit Exceeded了
原题http://acm.hdu.edu.cn/showproblem.php?pid=2100
代码是用java写的,大数运算问题:
import java.util.*;
import java.math.*;
public class Main{
  static void turn(BigInteger n,BigInteger r){
  if(n!=BigInteger.valueOf(0)){
  turn(n.divide(r),r);
  int ans=n.mod(r).intValue()+'A';
  System.out.print((char)ans);
  }
  }

  public static void main(String args[]){
  Scanner cin=new Scanner(System.in);
  while(cin.hasNext()){
  String a=cin.next();
  String b=cin.next();
  int la=a.length();
  int lb=b.length();
  BigInteger numA=BigInteger.valueOf(0);
  BigInteger numB=BigInteger.valueOf(0);
  for(int i=la-1;i>=0;i--){
  numA=numA.add(BigInteger.valueOf(a.charAt(i)-'A').multiply(BigInteger.valueOf(26).pow(la-1-i)));
  }
  for(int i=lb-1;i>=0;i--){
  numB=numB.add(BigInteger.valueOf(b.charAt(i)-'A').multiply(BigInteger.valueOf(26).pow(lb-1-i)));
  }
  BigInteger sum=numA.add(numB);
  turn(sum,BigInteger.valueOf(26));
  System.out.println();
  }
  }
}

------解决方案--------------------
static void turn(BigInteger n,BigInteger r){
if(n!=BigInteger.valueOf(0)){
turn(n.divide(r),r);
int ans=n.mod(r).intValue()+'A';
System.out.print((char)ans);
}
}

看了这个方法,后我觉得你不是要优化内存,而是要把你程序里可能有的bug改掉。
1。 r为0怎么办
2. r为1是什么效果
3. 2个对象是不是一样是用== 或 !=来判断的?
等等