黑马程序员技术交流社区
标题: 求任意个数的阶乘之和 [打印本页]
作者: 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 |