站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题求算法。

求算法。

摘要: 求算法。


f(m,n ) = m(m+1)(m+2)...(n-1)n

可是大家注意这个数大到一定程序就不是int了。

我现在要写方法

public int f(int m, int n)

谢谢大家参与,回答我的菜问题!!!


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


要精确,就用大数类吧


我把我的算法贴上来,大家找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;

}



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



给楼上的结帐了,不过,你还是没有做对。

要求的方法声明 public static int f(int m, int n) 是不能改变的。

大家来看看,如果不改变方法声明,是不是就会有越界的可能?


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


↑返回目录
前一篇: JDBC 调用存储过程问题
后一篇: 关于JSP获取查询参数乱码的问题