求1到100的阶乘和,谁来帮忙调试下?

lcb530 2007-09-30 09:21:13
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"))));

}
}


它出现了死循环.
...全文
1293 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiexie777 2007-10-14
  • 打赏
  • 举报
回复
谢谢worm_oz指出错误!

重新调试如下:

package demo;

import java.math.BigInteger;

public class Demosun {
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
worm_oz 2007-10-08
  • 打赏
  • 举报
回复
xiexie777,你的程序只算了阶乘,LZ的题目是计算阶乘和,不一样的。

看仔细了再发言,比较不容易说错话
xiexie777 2007-10-07
  • 打赏
  • 举报
回复
郁闷啊,弄了才发现楼主没分啊,楼主不厚道啊,郁闷啊,苍天
xiexie777 2007-10-07
  • 打赏
  • 举报
回复
package demo;
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
xiexie777 2007-10-07
  • 打赏
  • 举报
回复
只要求出来的数字最后几位不是零的肯定是错了,竟然还把数字贴出来,不是程序编写问题,是常识问题,只可惜没分,唉,楼主啊

----写了错别字,看来我要去小学语文重修了,把最后几位不是零的数字贴出来小学数学重修,呵呵,大家都一起重修小学去
xiexie777 2007-10-07
  • 打赏
  • 举报
回复
只要求出来的数字最好几位不是零的肯定是错了,竟然还把数字贴出来,不是程序编写问题,是常识问题,只可惜没分,唉,楼主啊
huangzansong 2007-10-07
  • 打赏
  • 举报
回复
9426900168370997926085983412447353987207072261398267244293835
9305624678223479506023400294093599136466986609124347432647622
826870038220556442336528920420940313
worm_oz 2007-10-05
  • 打赏
  • 举报
回复
昨天没仔细看,上面的版本不是用递归的,用递归实现的代码如下:

import java.math.BigInteger;

public class BigIntTest3 {

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) {
if (atr == 1) {
return new BigInteger("1");
} else {
return new BigInteger(String.valueOf(atr)).multiply(getResult(atr - 1));
}
}
}

执行结果同上
worm_oz 2007-10-04
  • 打赏
  • 举报
回复
LZ你自己改正后的代码还是有问题,把
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
lcb530 2007-10-03
  • 打赏
  • 举报
回复
我自己改正后的答案是这样的:

import java.math.BigInteger;

public class demo {

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
thiner 2007-10-02
  • 打赏
  • 举报
回复
-_-!!

我错了,刚才算了一下,100!的结果是:93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
没你的长。
Sorry!:|
worm_oz 2007-10-02
  • 打赏
  • 举报
回复
结果直接从Eclipse里copy的,没有验证过,但是用1到5的阶乘和验证过代码
worm_oz 2007-10-02
  • 打赏
  • 举报
回复
题目是求阶乘和,我的理解是先算阶乘再求和:
=1!+2!+3!+...+100!
thiner 2007-10-02
  • 打赏
  • 举报
回复
阶乘不是乘法吗?
为什么要用r.add()?
这道题我以前做过,MS结果比楼上给出的要长。
worm_oz 2007-10-02
  • 打赏
  • 举报
回复
结果是:
942690016837099792608598341244735398720707226139826724
429383593056246782234795060234002940935991364669866091
24347432647622826870038220556442336528920420940313
worm_oz 2007-10-02
  • 打赏
  • 举报
回复
import java.math.BigInteger;

public class BigIntTest {

public static void main(String[] args) {
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);
}
}
犇犇犇程序猿 2007-10-02
  • 打赏
  • 举报
回复
7楼正解!
乌拉拉_ 2007-10-02
  • 打赏
  • 举报
回复
我觉得用数组比较好,这样循环好控制
elukuangben 2007-10-01
  • 打赏
  • 举报
回复
个人认为,算到100!基本类型的数据长度都不够的,可以用数据结构进行定义,把它们分为几部分来装这个大数(100!),并制订好它们之间的运算和进位关系。
zxl_long 2007-09-30
  • 打赏
  • 举报
回复
把这个 if(i.equals("1")) 改了 if(i.equals(1))也不对
自己随便写了个,数字太大时有错
望各位大虾们指教一二
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倒不会出错
加载更多回复(5)

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧