新手求解..1~30的阶乘求和 ,用方法编写 哪错了?

iceyeaho 2011-11-25 03:46:44
double sum = 1.00;
for(int i = 1; i <= 30; i++){
int num = F(a);
sum += num;
}
System.out.println("sum = " + sum);
}
public static double F(int num){
for(int i = 1; i <= num; i++){
int a = 1;
a = a * i;
}
return a;
...全文
315 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangzhaoguo 2011-11-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ganhuihuikukuku 的回复:]

结果很大 . 我用递归做了1到15的阶乘 知道方法就可以了...
public class Text{
public static void main(String args[]){
System.out.println("15的阶乘之和为:"+m(15));
}
public static int mm(int n){
……
[/Quote]

递归不是好算法,效率很低,浪费内存,不建议使用
fangzhaoguo 2011-11-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 iceyeaho 的回复:]
double sum = 1.00;
for(int i = 1; i <= 30; i++){
int num = F(a);
sum += num;
}
System.out.println("sum = " + sum);
}
public static double F(int num){
for(int i = 1; i <= num; i++){
int a = ……
[/Quote]


int 存不住那么大的数

c++中有long long int
java中有BigInteger
fangzhaoguo 2011-11-27
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 beautifulstefanie 的回复:]

可以试着用递归实现奥---
[/Quote]

尽可能避免递归
haibaradc 2011-11-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 haibaradc 的回复:]

我是个很新的新手,看楼主的问题自己敲了一个不知道对不
Java code

public class Jiecheng{
public static void main(String []args){
double a=1;
double b=0;
for(int i=1;i<=3;i++){

……
[/Quote]
30改成3,忘改回来了
haibaradc 2011-11-27
  • 打赏
  • 举报
回复
我是个很新的新手,看楼主的问题自己敲了一个不知道对不

public class Jiecheng{
public static void main(String []args){
double a=1;
double b=0;
for(int i=1;i<=3;i++){

a=a*i;
b=b+a;
}
System.out.println(a);
System.out.println(b);
}
}


beautifulstefanie 2011-11-27
  • 打赏
  • 举报
回复
可以试着用递归实现奥---
Inhibitory 2011-11-27
  • 打赏
  • 举报
回复
asdp26266 2011-11-27
  • 打赏
  • 举报
回复
[code=Java][/code fff]
asdp26266 2011-11-27
  • 打赏
  • 举报
回复
笨笨肥肥 2011-11-26
  • 打赏
  • 举报
回复
...可能类名没有改,而且你连1L的都不知道如何运行,个人建议,看下书!
ganhuihuikukuku 2011-11-25
  • 打赏
  • 举报
回复
结果很大 . 我用递归做了1到15的阶乘 知道方法就可以了...
public class Text{
public static void main(String args[]){
System.out.println("15的阶乘之和为:"+m(15));
}
public static int mm(int n){
if(n==1) return 1;
else return n*mm(n-1);
}
public static int m(int n){
if(n==1)return 1;
else return mm(n)+m(n-1);
}
}
大数据类型还没学 还没接触过. 只能先了解到这里了。加油!
qqlwq123 2011-11-25
  • 打赏
  • 举报
回复
简单改下就行了

BigInteger bi_1 = new BigInteger("1");
BigInteger bi_2 = new BigInteger("0");
for(int i = 1;i<=30;i++) {
bi_1=bi_1.multiply(new BigInteger(String.valueOf(i)));
bi_2=bi_2.add(bi_1);
}
System.out.println(bi_2);
liushuaibaicai 2011-11-25
  • 打赏
  • 举报
回复
--------------------Configuration: <Default>--------------------
sum = 274410818470142134209703780940313

Process completed.

验证一楼无误
wang7535067 2011-11-25
  • 打赏
  • 举报
回复
越界了
zqfddqr 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qi_yuesq 的回复:]
1楼的大大 为什么把你的代码扔进去总是还很多红色的波浪线呢 没法运行 ...
[/Quote]类名没有改吧
iceyeaho 2011-11-25
  • 打赏
  • 举报
回复
public class MyJava {
public static void main(String[] args) {
long sum = 0;
for (int num = 1; num <= 30; num++) {
long a = (long) F(num);
sum += a;
}
System.out.println("sum = " + sum);
}

public static double F(int num) {
int a = 1;
for (int i = 1; i <= num; i++) {
a = a * i;
}
return a;
}
}
自己弄出来了
但是数字太大 溢出了
定义成什么类型呢
funfenffun 2011-11-25
  • 打赏
  • 举报
回复
果断表示1L没错,lz报的什么错,jdk加了没
qi_yueSQ 2011-11-25
  • 打赏
  • 举报
回复
1楼的大大 为什么把你的代码扔进去总是还很多红色的波浪线呢 没法运行 ...
Mourinho 2011-11-25
  • 打赏
  • 举报
回复
求阶乘要用BigInteger,30!用long早就越界了

import java.math.BigInteger;

public class Test1 {
public static void main(String[] args) {
BigInteger sum = new BigInteger("0");
for (int i = 1; i <= 30; i++) {
sum = sum.add(getResult(i));
}
System.out.println("sum = " + sum);
}

public static BigInteger getResult(int num) {
BigInteger result = new BigInteger("1");;
for (int i = 1; i <= num; i++) {
result = result.multiply(new BigInteger(String.valueOf(i)));
}
return result;
}
}




sum = 274410818470142134209703780940313

62,614

社区成员

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

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