rt
(笔试题)求n!
解决方案 »
- 各位大手能为小弟解释下这个findOne方法吗?this又是代表什么意思?
- JAVA小程序,我希望写一个窗口中出现三个球,但很囧地现在出现三个窗口,每个窗口一个球。。。这是怎么回事啊,应该怎么改?谢谢各位大侠了
- 如何能定义变量只接受方法里的返回值?如例题:
- 新手入门求助:my eclipse运行
- 这是什么错误!不影响运行,关闭Tomcate时候出现的,ECLIPSE内置的那个!
- 紧急!~请教高手~~~高分
- 关于main的疑问
- 继承的私有成员,究竟是如何回事呢?
- 自己无聊根据视频写了一个抢票的的程序,但是出了点问题
- java中的小疑惑
- 如何按照字节数来截取一个字符串
- 求用java正则表达式提取网页内容,救命啊!
for(int i=2; i<n; i++)
t = t * i;
System.out.println(t);n如果过大就会溢出
public long getNNNN(int n) {
long result = 1;
for (int i=n; i>0; i--) {
result = result * i;
}
return result;
}
public class Test {
public double getN(double n) {
if (n == 1)
return 1;
else
return (n * getN(n - 1));
}
public static void main(String[] args) {
double a = 10;
System.out.println(getN(a));
}
}
没测试,呵呵。
分析如下;
n!=n*(n-1)!
(n-1)!=(n-1)*(n-2)!
....
0!=1
可以得出:public static int func(int i) {
if (i == 0 || i == 1) {
return 1;
}
return i * func(--i);
}
不使用递归的代码如下:public static int func1(int i) {
int res = 1;
for (; i > 0; i--) {
res *= i;
}
return res;
}
long result = 1L;
while(num > 1) {
result *= num--;
}
return result;
}
public class Test{
public int getN(int n){
if(n==0 || n==1) return 1;
return n*getN(n-1);
}
public static void main(String[] args){
int result = new Test().getN(5);//例如N=5
System.out.println(result);
}
}
if(n<0 && n>17)
{}
else
{}
超过17,用BigDecimal
a, n = 1, 18
(2..n).each{|i| a *= i}
p a
结果溢出?溢出就没有结果了?程序就算不出来了?计算机的功能也太少点了吧……
一定要用int/long来存放最终结果?
没有人给出溢出后的解决方案
悲哀啊……那么多答案……
if (num <= 1)
return 1;
else
return num * getEstate(num - 1);
}
----
提示:以上不考虑负数~
可以支持到求5000的阶乘。不知对楼主有没有帮组;#include "stdio.h"
#define N 250000 /*定义数组存储的最大位数*/
void main()
{int a[N],num,c,d,i,j;
while(1){
printf("请输入数字:");
scanf("%d",&num);
for(j=0;j<N;j=j+1){
a[j]=0;}/*数组内元素初始赋值为0*/
c=num;i=0;
while(c!=0){
d=c%10;
a[i]=d;
c=(c-d)/10;
i=i+1;}/*将要求阶乘的数逆序存储在数组中*/
for(i=num-1;i>1;i=i-1){
for(j=0;j<N;j=j+1){
a[j]=a[j]*i;}
for(j=0;j<N;j=j+1){
if(a[j]>=10){
a[j+1]=a[j+1]+a[j]/10;
a[j]=a[j]%10;}}
}/*计算阶乘*/
for(i=N-1;i>-1;i=i-1){
if(a[i]!=0)
break;}/*从数组尾端开始,找到第一个不为0的元素的位置*/
printf("该数字阶乘=");
for(j=i;j>-1;j=j-1){
printf("%d",a[j]);}
printf("\n");
printf("--------------------------------------------------------------------------------");
printf("\n");/*输出计算后的结果*/
}
}