试编程:计算 1, 输入一个数a,求a!。(a!标识a的阶乘,即1*2*3*……*a的累乘的积)? Java 编写一个方法,求一个数的阶乘。 n!=1×2×3×...

作者&投稿:酆矿 (若有异议请与网页底部的电邮联系)
数组解法牛。
首先定义一个ns数组用来存储n!的各个位数上的数值,利用for循环给ns加入10000个0值,以方便后面直接根据index对数组进行操作。

然后定义length作为 “数组的长度”(有真实数值的而非自动添加的0) 也即n!的结果的位数。

之后也必须用到for循环进行累乘,但跟解法一的直接累乘不同,这里是乘数(即i)跟各个位上的数分别相乘,若结果大于等于10则carry>0即向前进一位数值为carry,若j循环结束后carry>0则说明需要在当前ns的“长度”上进一位,所以length+1即位数+1,这里carry起的就是判断是否进位的作用,而length则代表着结果的位数。
n= int(input())
ns = [0 for i in range(10000) ]
n= int(input())

ns = [0 for i in range(10000) ]
length = 1
ns[0] = length = 1
if n>=2:
#for i in range(2,n+1):
##carry = 0
##for j in range(length):
###temp = ns[j] * i + carry
###carry = int(temp/10)
###ns[j] = temp % 10
##while carry>0:
###ns[length] += carry%10
###length+=1
###carry = int(carry/10)
while length>0:
#length -=1
#print(ns[length],end='')

把# 替换为空格就可以运行。
如输入1000,计算1000!
'''python
n= int(input())
ns = [0 for i in range(10000) ]
length = 1
ns[0] = length = 1
if n>=2:
for i in range(2,n+1):
carry = 0
for j in range(length):
temp = ns[j] * i + carry
carry = int(temp/10)
ns[j] = temp % 10
while carry>0:
ns[length] += carry%10
length+=1
carry = int(carry/10)
while length>0:
length -=1
print(ns[length],end='')

a=int(input())

b=1

for i in range(2,a+1):

    b*=i

print(b)



c语言 编程实现求n!要求用定义求阶乘的函数~

1、打开vs2017软件,新建c语言的工程,首先开头引入头文件,然后调用先调用一下求阶乘的函数和空的主函数,最下方定义prime函数用来求阶乘:

2、主函数中用scanf函数接受用户输入的的数字,接着将输入的数传入处理阶乘的函数中完成计算,最后输出打印结果。prime函数有一个参数,首先判断是否为正数,然后用prime函数自身乘以参数s,最后返回值即可完成:

3、将程序编译运行,弹出窗口输入任意的数,计算阶乘;这里输入7,得到结果是5040。以上就是C语言求阶乘的方法:

方法和分析见下文:

分析
1、确定基本要求,应作为方法的限定条件或特殊情况处理
(1)规定:0!=1
(2)规定:n!中n非负

2、确定逻辑:
阶乘是比较适合递归的思路,因为n!=n*(n-1)!,直到求解1!作为结束

代码(因为不太熟悉java,可能还需要题主进行微调)

long Factorials(int n)
{
if(n<0) return -1;//主要为了表示错误,题主可以自定义
if(n==1||n==0) return 1;//0!是特殊约定,1!是作为递归的结束
else return n*Factorials(n-1);//进行递归,求解阶乘结果
}