黑马程序员技术交流社区
标题: 求任意个数的阶乘之和 [打印本页]
作者: jagon    时间: 2014-3-13 11:34
标题: 求任意个数的阶乘之和
 本帖最后由 jagon 于 2014-3-13 13:40 编辑 
编写一个Java程序在屏幕上输出1!+2!+3!+……+10!的和。(循环)
public class ForTest { 
public static void main( String args[] ) {
  int  i,j,mul,sum=0;
for(i=1;i<=10;i++) {
mul=1;
for(j=1,j<=i;j++) {
mul=mul*j;
}
      sum=sum+mul;
}
System.out.println(“1!+2!+3!+……+10!= ”+sum);
}
}
好不容易搞定了这个程序,可是学习完之后我一直在想,能不能把这个程序变成任意的输入数值,而不是仅仅局限于10个数的阶乘,改成是可以是任意的数的阶乘之和?(诚邀一起探讨......)
作者: 菜小徐    时间: 2014-3-13 11:41
你把10改成自己输入的一个值就行了
作者: 王浩龙    时间: 2014-3-13 12:01
- public class ForTest { 
 
 
- public static void main( String args[] ) {
 
 
- System.out.println(factorial(10));
 
 
- }
 
- //可以抽取出来一个方法直接传入你要阶乘到的值就行了
 
- public static int factorial(int n){
 
-         int  mul,sum=0;
 
 
-         for(int i=1;i<=n;i++) {
 
-                 mul=1;
 
-                 for(int j=1;j<=i;j++) {
 
-                         mul=mul*j;
 
-                 }
 
-                 sum=sum+mul;
 
-         }
 
-         return sum;
 
-         }
 
- }
请看我对你代码的改进。
作者: chen20134    时间: 2014-3-13 12:13
从屏幕输入一个数字,把10改成输入的值就行了
- import java.util.Scanner;
 
- class ForTest 
 
- {
 
-         public static void main( String args[] ) 
 
-         {
 
-                 Scanner in = new Scanner(System.in);
 
-                 int num = in.nextInt();
 
-                 in.close();
 
-                 int  i,j,mul,sum=0;
 
-                 for(i=1;i<=num;i++) 
 
-                 {
 
-                         mul=1;
 
-                         for(j=1;j<=i;j++) 
 
-                         {
 
-                                 mul=mul*j;
 
-                         }
 
-                                   sum=sum+mul;
 
-                 }
 
-                 for(int x=1;x<=num;x++)//输出
 
-                 {
 
-                         System.out.print(x+"!");
 
-                         if(x!=num)
 
-                                 System.out.print("+");
 
-                 }
 
-                 System.out.println("="+sum);
 
-         }
 
- }
作者: 往事如烟    时间: 2014-3-13 12:23
- public class ForTest {
 
-         public static void main(String[] args) {
 
-                 java.util.Scanner sc=new java.util.Scanner(System.in);//输入参数
 
-                 int input=0;
 
-                 try{
 
-                         input=sc.nextInt();//获取输入参数
 
-                         int mul,sum=0;
 
-                         for(int i=1;i<=input;i++) {
 
-                                 mul=1;
 
-                                 for(int j=1;j<=i;j++) {
 
-                                         mul=mul*j;
 
-                                 }
 
-                               sum=sum+mul;
 
-                         }
 
-                         String st="";
 
-                         for(int i=1;i<=input;i++){ //组装输出语句
 
-                                 st+=String.valueOf(i)+"!";
 
-                                 if(i!=input){
 
-                                         st+="+";
 
-                                 }
 
-                         }
 
-                         System.out.println(st+" = "+sum);
 
-                 }catch(Exception e){
 
-                         System.out.println("输入有误!");
 
-                 }
 
-         }
 
- }
 
作者: syw02014    时间: 2014-3-13 16:27
给你两段求大整数阶乘和加法运算的代码(C语言写的,和java的很像),希望能帮到你:
- void BigFactorial(int m) //求大整数阶乘
 
- { 
 
-     static int a[50000]={0,1};//第一位不用 
 
-     int i,j,carry,tmp,lenth=1;//carry表示进位 
 
-     for (i=2;i<=m;i++) 
 
-     { 
 
-         carry=0; 
 
-         for (j=1;j<=lenth;j++) 
 
-         { 
 
-             //乘法转化为加法和进位 
 
-             tmp=a[j]*i+carry; 
 
-             a[j]=tmp%10; 
 
-             carry=tmp/10; 
 
-             //如果有进位,则向前扩展一位 
 
-             if (j==lenth&&carry!=0) 
 
-                 lenth++; 
 
-         } 
 
-     } 
 
-     for(int k=1;k<lenth/2;k++) 
 
-                 a[k]=a[lenth-k]; 
 
- } 
 
 
 
- void bigplus(int a[],int b[],int c[])  //计算两个大整数的和,输入:a和b分别使用字符串表示的两个大整数,输出:c是a和b的和 
 
- {    
 
-         int i,len;
 
-         len=(a[0]>b[0]?a[0]:b[0]);  //a[0] b[0]保存数组长度,len为较长的一个 
 
-         for(i=0;i<MAXINT;i++)//将数组清0
 
-                 c[i]=0;    
 
-         for (i=1;i<=len;i++)//计算每一位的值     
 
-         {        
 
-                 c[i]+=(a[i]+b[i]);        
 
-                 if (c[i]>=10)        
 
-                 {           
 
-                         c[i]-=10;//大于10的取个位           
 
-                         c[i+1]++;//高位加1         
 
-                 }    
 
-         }    
 
-         if (c[i+1]>0) 
 
-                 len++;        
 
-         c[0]=len;//c[0]保存结果数组实际长度   
 
-         for (i=1;i<len/2;i++)                
 
-                 c[i]=c[len-i];     
 
- }
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |