c语言求1!+2!+10?

用c语言编程求1!+2!+10!就这3个注意:求1!+2!+10!就只有这三个

如有帮助,望点击我回答右上角[采纳]支持一下。

#include <stdio.h>
long jiecheng(int n)
{
int sum =1,i;
for (i = 1; i <=n; i++)
{
sum *= i;
}
return sum;
}
void main()
{
double sum ;
sum = jiecheng(1)+jiecheng(2)+jiecheng(10);
printf("%f",sum);
}


#include<stdio.h>
int jc(int n){
    int y;
    if(n==1){
        return 1;
    }
    else
        y=jc(n-1)*n;
    return y;
}
int main()
{
    int i,x,n;

    printf("%d",jc(1)+jc(2)+jc(10));
    return 0;
}

img

这是用汇编实现的,可能更清晰一点

.LC0:
.string "1! +2! +10! = %d\n"

.globl main

f:
pushq %rbp
movq %rsp,%rbp
subq $0x1000,%rsp

movl %edi,-0x1000(%rbp) /* i */

cmpl $1,-0x1000(%rbp)
jne .Lf_400
movl $1,%eax
jmp .Lf_0

.Lf_400:
movl -0x1000(%rbp),%eax /* i */
subl $1,%eax
movl %eax,%edi
movl $0,%eax
call f

imull -0x1000(%rbp),%eax /* i */
jmp .Lf_0

movl $0,%eax

.Lf_0:
movq %rbp,%rsp
popq %rbp
ret

main:
pushq %rbp
movq %rsp,%rbp
subq $0x1000,%rsp

movl $1,%edi
movl $0,%eax 
call f 
movl %eax,%ecx


movl $2,%edi 
movl $0,%eax 
call f 
addl %ecx,%eax
movl %eax,%ecx


movl $10,%edi 
movl $0,%eax 
call f 
addl %ecx,%eax 

movl %eax,%esi
leaq .LC0(%rip),%rdi 
movl $0,%eax 
call printf 

movl $0,%eax
movq %rbp,%rsp
popq %rbp
ret

运行结果: 1! +2! +10! = 3628803