当前页面: 开发资料首页 → 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的,所以不管怎么样都会越界