黑马程序员技术交流社区

标题: 求任意个数的阶乘之和 [打印本页]

作者: 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
  1. public class ForTest {

  2. public static void main( String args[] ) {

  3. System.out.println(factorial(10));

  4. }
  5. //可以抽取出来一个方法直接传入你要阶乘到的值就行了
  6. public static int factorial(int n){
  7.         int  mul,sum=0;

  8.         for(int i=1;i<=n;i++) {
  9.                 mul=1;
  10.                 for(int j=1;j<=i;j++) {
  11.                         mul=mul*j;
  12.                 }
  13.                 sum=sum+mul;
  14.         }
  15.         return sum;
  16.         }
  17. }
复制代码
上面的回答是完全的正确。你还可以把阶乘写成一个方法,需要用的时候随时去调用就行了。
请看我对你代码的改进。
作者: chen20134    时间: 2014-3-13 12:13
从屏幕输入一个数字,把10改成输入的值就行了
  1. import java.util.Scanner;
  2. class ForTest
  3. {
  4.         public static void main( String args[] )
  5.         {
  6.                 Scanner in = new Scanner(System.in);
  7.                 int num = in.nextInt();
  8.                 in.close();
  9.                 int  i,j,mul,sum=0;
  10.                 for(i=1;i<=num;i++)
  11.                 {
  12.                         mul=1;
  13.                         for(j=1;j<=i;j++)
  14.                         {
  15.                                 mul=mul*j;
  16.                         }
  17.                                   sum=sum+mul;
  18.                 }
  19.                 for(int x=1;x<=num;x++)//输出
  20.                 {
  21.                         System.out.print(x+"!");
  22.                         if(x!=num)
  23.                                 System.out.print("+");
  24.                 }
  25.                 System.out.println("="+sum);
  26.         }
  27. }
复制代码




作者: 往事如烟    时间: 2014-3-13 12:23
  1. public class ForTest {
  2.         public static void main(String[] args) {
  3.                 java.util.Scanner sc=new java.util.Scanner(System.in);//输入参数
  4.                 int input=0;
  5.                 try{
  6.                         input=sc.nextInt();//获取输入参数
  7.                         int mul,sum=0;
  8.                         for(int i=1;i<=input;i++) {
  9.                                 mul=1;
  10.                                 for(int j=1;j<=i;j++) {
  11.                                         mul=mul*j;
  12.                                 }
  13.                               sum=sum+mul;
  14.                         }
  15.                         String st="";
  16.                         for(int i=1;i<=input;i++){ //组装输出语句
  17.                                 st+=String.valueOf(i)+"!";
  18.                                 if(i!=input){
  19.                                         st+="+";
  20.                                 }
  21.                         }
  22.                         System.out.println(st+" = "+sum);
  23.                 }catch(Exception e){
  24.                         System.out.println("输入有误!");
  25.                 }
  26.         }
  27. }
复制代码

作者: syw02014    时间: 2014-3-13 16:27
给你两段求大整数阶乘和加法运算的代码(C语言写的,和java的很像),希望能帮到你:
  1. void BigFactorial(int m) //求大整数阶乘
  2. {
  3.     static int a[50000]={0,1};//第一位不用
  4.     int i,j,carry,tmp,lenth=1;//carry表示进位
  5.     for (i=2;i<=m;i++)
  6.     {
  7.         carry=0;
  8.         for (j=1;j<=lenth;j++)
  9.         {
  10.             //乘法转化为加法和进位
  11.             tmp=a[j]*i+carry;
  12.             a[j]=tmp%10;
  13.             carry=tmp/10;
  14.             //如果有进位,则向前扩展一位
  15.             if (j==lenth&&carry!=0)
  16.                 lenth++;
  17.         }
  18.     }
  19.     for(int k=1;k<lenth/2;k++)
  20.                 a[k]=a[lenth-k];
  21. }


  22. void bigplus(int a[],int b[],int c[])  //计算两个大整数的和,输入:a和b分别使用字符串表示的两个大整数,输出:c是a和b的和
  23. {   
  24.         int i,len;
  25.         len=(a[0]>b[0]?a[0]:b[0]);  //a[0] b[0]保存数组长度,len为较长的一个
  26.         for(i=0;i<MAXINT;i++)//将数组清0
  27.                 c[i]=0;   
  28.         for (i=1;i<=len;i++)//计算每一位的值     
  29.         {        
  30.                 c[i]+=(a[i]+b[i]);        
  31.                 if (c[i]>=10)        
  32.                 {           
  33.                         c[i]-=10;//大于10的取个位           
  34.                         c[i+1]++;//高位加1         
  35.                 }   
  36.         }   
  37.         if (c[i+1]>0)
  38.                 len++;        
  39.         c[0]=len;//c[0]保存结果数组实际长度   
  40.         for (i=1;i<len/2;i++)               
  41.                 c[i]=c[len-i];     
  42. }
复制代码






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2