import java.math.BigInteger;public class demosum{
public static void main(String[] args){
BigInteger result = new BigInteger("1");
BigInteger bi = new BigInteger("1");
for(int i=1;i<=100;i++){
bi = getResult(new BigInteger(""+i));
result.add(bi);
System.out.println (result);
}
}
public static BigInteger getResult(BigInteger i){
if(i.equals("1")){
return new BigInteger("1");
}
return i.multiply(getResult(i.divide(new BigInteger("1"))));
}
}
它出现了死循环.
public static void main(String[] args){
BigInteger result = new BigInteger("1");
BigInteger bi = new BigInteger("1");
for(int i=1;i<=100;i++){
bi = getResult(new BigInteger(""+i));
result.add(bi);
System.out.println (result);
}
}
public static BigInteger getResult(BigInteger i){
if(i.equals("1")){
return new BigInteger("1");
}
return i.multiply(getResult(i.divide(new BigInteger("1"))));
}
}
它出现了死循环.
不要用递归,用循环好了
2. i.multiply(getResult(i.divide(new BigInteger("1"))));
3.直接循环不就好了吗
自己随便写了个,数字太大时有错
望各位大虾们指教一二
public static void main(String[] args) {
long result = 0;
long tmp = 1;
int i;
for(i = 1; i <= 100; i++) {
tmp *= getMul(i);
result += tmp;
System.out.println(i+"的阶乘:"+tmp);
}
System.out.println("1到"+(i-1)+"的阶乘之和:"+result);
}
private static long getMul(int num) {
return 1 * num;
}
改为double倒不会出错
BigInteger t = BigInteger.ONE;
BigInteger r = BigInteger.ZERO;
for(int i = 1; i <= 100; i++) {
t = t.multiply(new BigInteger(String.valueOf(i)));
r = r.add(t);
}
System.out.println(r);
}
}
为什么要用r.add()?
这道题我以前做过,MS结果比楼上给出的要长。
没你的长。
Sorry!:|
public static void main(String[] args) {
BigInteger r = BigInteger.ZERO;
for(int i = 1; i <= 100; i++) {
r = r.add(getResult(i));
}
System.out.println(r);
}
public static BigInteger getResult(int atr){
BigInteger t = BigInteger.ONE;
BigInteger rx = BigInteger.ZERO;
for (int i = 1; i<=atr; i++){
t = t.multiply(new BigInteger(String.valueOf(i)));
rx=rx.add(t);
}
return rx;
}
}
它的结果是:
95221410216348484495220122088890777516830189
30970614840888493645111490125520863186034184
18617044362540240315555410978265358075712570
12200675989420962514971614
for(int i = 1; i <= 100; i++) {
换成
for(int i = 1; i <= 3; i++) {
计算3的阶乘和来验证,得到的输出结果是13,但是1! + 2! + 3! = 1 + (1 x 2) + (1 x 2 x 3) = 1 + 2 + 6 = 9
这道题如果用递归的话,正确的代码应该是:import java.math.BigInteger;public class BigIntTest2 { public static void main(String[] args) {
BigInteger r = BigInteger.ZERO;
for (int i = 1; i <= 100; i++) {
r = r.add(getResult(i));
}
System.out.println(r);
} public static BigInteger getResult(int atr) { BigInteger t = BigInteger.ONE;
//BigInteger rx = BigInteger.ZERO;
for (int i = 1; i <= atr; i++) {
t = t.multiply(new BigInteger(String.valueOf(i)));
//rx = rx.add(t); //t里面已经是atr的阶乘了,如果再加一遍,getResult的返回值就直接是阶乘和了,这一行应该去掉
}
return t;
}
}执行结果还是:
942690016837099792608598341244735398720707226139826724
429383593056246782234795060234002940935991364669866091
24347432647622826870038220556442336528920420940313
BigInteger r = BigInteger.ZERO;
for (int i = 1; i <= 100; i++) {
r = r.add(getResult(i));
}
System.out.println(r);
} public static BigInteger getResult(int atr) {
if (atr == 1) {
return new BigInteger("1");
} else {
return new BigInteger(String.valueOf(atr)).multiply(getResult(atr - 1));
}
}
}执行结果同上
import java.math.BigInteger;public class Demosun {
public static void main(String[] args) { BigInteger bigNum = new BigInteger("100");
System.out.print(factorial(bigNum));
}
public static BigInteger factorial(BigInteger n)
{
if(n.equals(BigInteger.ONE))
return BigInteger.ONE;
else
return n.multiply(factorial(n.subtract(BigInteger.ONE)));
}
}
正确运行:记得给分啊
运行结果:
9332621544394415268169923885626670049071596826438
1621468592963895217599993229915608941463976156518
286253697920827223758251185210916864000000000000000000000000
public static void main(String[] args) { BigInteger result = BigInteger.ZERO;
for(int i = 1;i<=100;i++)
{
String tempNum = i+"";
result = result.add(factorial(new BigInteger(tempNum)));
}
System.out.println(result);
}
public static BigInteger factorial(BigInteger n)
{
if(n.equals(BigInteger.ONE))
return BigInteger.ONE;
else
return n.multiply(factorial(n.subtract(BigInteger.ONE)));
}
运行结果:942690016837099792608598341244735398720707226139
826724429383593056246782234795060234002940935991364669866
09124347432647622826870038220556442336528920420940313