求阶乘!!!!

sxb18 2010-07-22 01:13:33
求999的阶乘!!!!
...全文
1828 53 打赏 收藏 转发到动态 举报
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
wct357110558 2012-10-10
  • 打赏
  • 举报
回复
蛋痛的完全可以拿纸笔来算
amdgaming 2011-05-12
  • 打赏
  • 举报
回复
算法果然很牛
自恋的艺术家 2010-07-25
  • 打赏
  • 举报
回复
用数组记录结果的每一位,对每一位进行乘法运算。
注意进位,防止数组大小不够用。
xialulee 2010-07-25
  • 打赏
  • 举报
回复
能不能用Gamma函数的数值算法算一个近似值出来?
furtherchan 2010-07-25
  • 打赏
  • 举报
回复
路过,打酱油的
hulian3ye 2010-07-24
  • 打赏
  • 举报
回复
这个容易求,搞个数组,每个元素放一个数字,乘法自己实现,如果数组不够的话,改用链表应该可以的
rrison111 2010-07-24
  • 打赏
  • 举报
回复
(define (f n)
(if (= n 1)
1
(* n(f (- n 1)))))

rrison111 2010-07-24
  • 打赏
  • 举报
回复
1111111111111111
I_CAN_FLY_Y 2010-07-23
  • 打赏
  • 举报
回复
good!
xdchen26 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 mfc_ipsu 的回复:]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int buffer[500];
memset(buffer,0,sizeof(buffer));
int p ;
printf("输入整数:");
scanf("%d",&p);
bool flag = fa……
[/Quote]

good!
flytreeleft 2010-07-23
  • 打赏
  • 举报
回复
其实,如果不需要得到结果的每一位的话,可以利用对数的性质来求解。如求n的阶乘,则可用如下公式:n!=10^(log 10(n!))=10^(log 10(1)+log 10(2)+log 10(3)+……+log 10(n)),其中,log 10(n)表示以10为底,n的对数。这样的话,就能求超大的阶乘了,当然,这种方法只在对结果要求不高时适用...
MFC_ipsu 2010-07-22
  • 打赏
  • 举报
回复
如果你想算更大的数字,只需要将数组分配足够的空间就可以了.
MFC_ipsu 2010-07-22
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int buffer[500];
memset(buffer,0,sizeof(buffer));
int p ;
printf("输入整数:");
scanf("%d",&p);
bool flag = false;
bool flag1[500]={false};
int add = 0;
memcpy(buffer+499,&p,sizeof(p));
for(int m=p-1;m>=1;--m)
{
for(int i=sizeof(buffer)/sizeof(int)-1;i>=0;--i)
{
if(flag)
{
buffer[i]= buffer[i]*m+add;
flag = false ;
add = 0;
}
else
{
buffer[i]= buffer[i]*m ;
}
if(buffer[i]>9)
{
add = buffer[i]/10;
buffer[i] = buffer[i]%10;
if(buffer[i]==0)
{
flag1[i] = true ;
}
flag = true ;
}
}
}
printf("%d!的阶乘为",p);
for(int j=0;j<=sizeof(buffer)/sizeof(int)-1;j++)
{
if(flag1[j]||buffer[j]!=0)
{
printf("%d",buffer[j]);
}
}
printf("\n");
return 0;
}

b11ght 2010-07-22
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 cjing310 的回复:]

引用 37 楼 a13062331830 的回复:

用递归吧
可以实现你要的
private int JC(int Number)
(
if(number==1)
{
return 1;
}
return Number * JC(Number-1);
)


问个低级问题,这里的return 1;执行 之后,为什么return Number * JC(Number-……
[/Quote]
return 1是递归的最终条件。
jon_____ 2010-07-22
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 a13062331830 的回复:]

用递归吧
可以实现你要的
private int JC(int Number)
(
if(number==1)
{
return 1;
}
return Number * JC(Number-1);
)
[/Quote]

问个低级问题,这里的return 1;执行 之后,为什么return Number * JC(Number-1);还执行
不是直接return回去?
zhuzeitou 2010-07-22
  • 打赏
  • 举报
回复
递归的话也要用BigInteger,int肯定不够的
而且递归的话次数高会出现栈溢出……
哥子谭 2010-07-22
  • 打赏
  • 举报
回复
用递归吧
可以实现你要的
private int JC(int Number)
(
if(number==1)
{
return 1;
}
return Number * JC(Number-1);
)
哥子谭 2010-07-22
  • 打赏
  • 举报
回复
用递归吧
可以实现你要的
luozhangwen 2010-07-22
  • 打赏
  • 举报
回复
9楼的我改了下, 不要用list用list会OutOfMemory
速度没有火龙果的快, 但是写起来简单..


package com.lzw;

import java.math.BigInteger;

public class Factorial
{
private static BigInteger temp = BigInteger.ONE;

private static BigInteger count = BigInteger.ONE;

public static BigInteger factorial(int num)
{
for (int i = 1; i <= num; i++)
{
temp = temp.multiply(count);
count = count.add(BigInteger.ONE);
}
return null;
}
public static void main(String[] args)
{
long start = System.currentTimeMillis();
BigInteger bi = factorial(99999);
long end = System.currentTimeMillis();
System.out.println(end-start);
}
}

jbz001 2010-07-22
  • 打赏
  • 举报
回复
这个你得自己设计一个大整数的类进行计算。
加载更多回复(33)

62,614

社区成员

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

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