f(m,n ) = m(m+1)(m+2)...(n-1)n可是大家注意这个数大到一定程序就不是int了。我现在要写方法public int f(int m, int n)谢谢大家参与,回答我的菜问题!!!

解决方案 »

  1.   

    弄3个数字a,b,sum
    a里面放m的各个位的数值,b放n的,sum是总和.
    比如f(1,100),那么a={1},b={1,0,0},sum应该是{5,0,5,0} ,最后把sum的各个位数拼起来就是结果了,这样可以做很大的数的计算.
      

  2.   

    我把我的算法贴上来,大家找Bug来,不过,我这个只能算到一定的位数比如f(3, 40)就越了int的界的。 public static int f(int m, int n) {

    //Wenn n grosse als n, return 1 zurueck.
    if(m > n ) {
    return 1;
    }
    //produkt rechnen.
    int produkt = m;
    for(int  i = 1; i < n - m + 1; i++) {
    produkt = produkt * (m + i);
    }
    return produkt;

    }
      

  3.   


    import java.math.*;public class Test { public static void main(String[] args) {

    System.out.println(f(BigDecimal.valueOf(1), BigDecimal.valueOf(100)));
    }

    public static BigDecimal f(BigDecimal m, BigDecimal n) {

    //Wenn n grosse als n, return 1 zurueck.
    if(m.compareTo(n)>1) {
    return BigDecimal.valueOf(1);
    }
    //produkt rechnen.
    BigDecimal produkt = m;
    for(int  i = 1; i < n.subtract(m).intValue() + 1; i++) {
    produkt = produkt.multiply(m.add(BigDecimal.valueOf(i)));
    }
    return produkt;
    }
    }
    输出结果:
    93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
      

  4.   

    给楼上的结帐了,不过,你还是没有做对。要求的方法声明 public static int f(int m, int n) 是不能改变的。大家来看看,如果不改变方法声明,是不是就会有越界的可能?
      

  5.   

    你的返回值是int的,所以不管怎么样都会越界