首页 > 试题广场 >

阶乘

[编程题]阶乘
  • 热度指数:8547 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
请编写一个程序,从键盘上输入n(n 的范围是1~20),求n 的阶乘。

输入描述:
输入第一行为样例数m,接下来m行每行一个整数n,n不超过20。


输出描述:
输出m行表示对应的n的阶乘。
示例1

输入

1
3

输出

6

备注:
提示:注意输出结果可能超32位整型。
题目里这个备注很重要啊,所以存储阶乘的值的时候,应该用long long而不是int,否则就会因为超出范围得到错误结果
备注:
提示:注意输出结果可能超32位整型。
#include<iostream>
using namespace std;
int main(){
    int m,n;
    cin>>m;
    for(int i=0;i<m;i++){
        cin>>n;
        long long total=1;
        for(int j=1;j<=n;j++)
            total*=j;
        cout<<total<<endl;
    }
}

发表于 2019-02-28 23:17:12 回复(0)
#include <iostream>
using namespace std;

int main(){
    int m,n;
    //n 的范围是1~20 先把1-20的阶乘算出来,直接带入即可
    long long *a=new long long[21];a[1]=1;
    for(int i=2;i<=20;i++) a[i]=a[i-1]*i;
    while(cin>>m){
        for(int i=0;i<m;i++){
            cin>>n;
            cout<<a[n]<<endl;
        }
    }
}

发表于 2019-02-24 11:14:57 回复(0)
#include<iostream>
using namespace std;
long long mutiple_sum(int n)
{
    long long sum = 1;
    for(int i = 1;i <= n;i++)
        sum *= i;
    return sum;
}
int main(void)
{
    int m;
    while(cin >> m)
    {
        while(m--)
        {
            int n;
            cin >> n;
            long long sum = mutiple_sum(n);
            cout << sum << endl;
        }
    }
    return 0;
}

发表于 2022-02-08 18:18:48 回复(0)
Java 
import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int m = scanner.nextInt();
        for (int i = 0; i < m; i++) {
            int n = scanner.nextInt();
            BigInteger res = BigInteger.ONE;
            for (int j = 1; j <= n; j++) {
                res = res.multiply(new BigInteger(j+""));
            }
            System.out.println(res);
        }
    }
}


发表于 2020-03-20 09:12:59 回复(0)
很显然,本题考查递归。
#include <iostream>
using namespace std;
long long jiecheng(int n){
	if(n==1){
		return 1;
	}
	return n*jiecheng(n-1);
}
int main(){
	int n, m;
	cin >> m;
	for(int i = 0; i< m;i++){
		cin >> n;
		cout<<jiecheng(n)<<endl;
	} 
	return 0;
} 


发表于 2020-02-09 20:34:45 回复(0)
#include<stdio.h>
#include<string.h>
struct bign
{
    int d[100001];
    int len;
    bign()
    {
        memset(d,  0, sizeof(d));
        len = 0;
    }
};
int main()
{
    int m;
    while(scanf("%d",&m)!=EOF)
    {
        int n;
        while(m--)
        {
            scanf("%d",&n);
            bign a;
            a.d[a.len++] = 1;
            for(int i=1; i<=n; i++)
            {
                int carry = 0;
                for(int j=0; j<a.len; j++)
                {
                    int temp = a.d[j]*i + carry;
                    carry = temp / 10;
                    a.d[j] = temp % 10;
                }
                while(carry)
                {
                    a.d[a.len++] = carry % 10;
                    carry/=10;
                }
            }
            for(int i=a.len-1; i>=0; i--)
                printf("%d", a.d[i]);
            printf("\n");
        }
     }
     return 0;
}

       
发表于 2019-03-27 15:42:16 回复(0)
#include<stdio.h>
int main()
{
    int m,i,j,n,d,crray,temp,a[100]={0};//d代表位数,temp做过渡,crray做进位数
    scanf("%d",&m);
    while(m--)
    {
        d=1;a[0]=1;
        scanf("%d",&n);
        for(i=1;i<=n;i++)//n的阶乘
        {
            for(j=0,crray=0;j<d;j++)//a[0]是个位
            {
                temp=a[j]*i+crray;
                a[j]=temp%10;
                crray=temp/10;
            }
            while(crray)
            {
                a[d]=crray%10;
                crray=crray/10;
                d++;
            }
        }
        for(i=d-1;i>=0;i--)
            printf("%d",a[i]);
        printf("\n");
    }
    return  0;
}

编辑于 2020-05-09 14:57:53 回复(1)
注意,大数使用long long int
#include <cstdio>

long long int Factorial(int n){
    if(n == 0 || n == 1){
        return n;
    }else{
        return n*Factorial(n-1);
    }
}

int main(){
    int m;
    while(scanf("%d",&m) != EOF){
        for(int i = 0; i < m; ++i){
            int n;
            scanf("%d",&n);
            printf("%lld\n",Factorial(n));
        }
    }
    return 0;
}


发表于 2023-03-22 13:37:07 回复(0)
#include<iostream>
using namespace std;

int main()
{
    int m;
    cin>>m;
    while(m--)
    {
        int n;
        cin>>n;
        long int res=1;
        for(int i=2;i<=n;i++)
            res*=i;
        cout<<res<<endl;
    }
}

发表于 2022-03-04 20:38:24 回复(0)
#include 
(849)#include 
using namespace std;
long long F(long long n){
    if(n==0) return 1;
    else return F(n-1)*n;
}
int main(){
    int T;
    long long n;
    scanf("%d",&T);
    while(T--){
        scanf("%lld",&n);
        printf("%lld\n",F(n));
    }

    return 0;
}
发表于 2020-04-29 19:43:13 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 500000

void mtp(char *, int);

int main()
{
    int m;
    char str[MAXSIZE] = {0};
    while(~scanf("%d", &m))
    {
        for(int k = 0; k < m; k++)
        {
            int n;
            scanf("%d", &n);
            memset(str, 0, MAXSIZE);
            str[0] = '1';
            for(int i = 2; i <= n; i++)
                mtp(str, i);
            int len = strlen(str);
            for(int i = len - 1; i >= 0; i--)
                printf("%c", str[i]);
            putchar(10);
        }

    }

    return 0;
}

void mtp(char str[], int n)
{
    int count = 0, len = strlen(str);
    for(int i = 0; i < len; i++)
    {
        int tmp = (str[i] - '0') * n + count;
        count  = tmp / 10;
        str[i] = tmp % 10 + '0';
    }
    while(count)
    {
        str[len++] = (count % 10) + '0';
        count /= 10;
    }
    str[len] = '\0';
}
至少可计算30000以上的阶乘。
编辑于 2020-04-02 23:52:00 回复(0)
#include<stdio.h>
int main(void)
{
	int m;
	while(scanf("%d",&m)!=1||m<0)
	{
		while(getchar()!='\n')
			continue;
	}
	for (int i=0;i<m;i++)
	{
		int x;
		while(scanf("%d",&x)!=1||x<1||x>20)
		{
			while(getchar()!='\n')
				continue;
		}
		int j;
		__int64_t sum=1;
		for(j=1;j<=x;j++)
			sum=sum*j;
		printf("%lld\n",sum);
	}
	return 0;
}

发表于 2020-01-09 17:31:48 回复(0)
#include<iostream>
using namespace std;


int main()
{
    int m, n, i;
    long long mul;
    cin>>m;
    while(m > 0)
    {
        mul = 1;
        cin>>n;
        for(i=1; i<=n; i++)
        {
            mul *= i;
        }
        cout<<mul<<endl;
        m--;
    }
    return 0;
}

发表于 2019-12-17 15:09:39 回复(0)
#include <iostream>

using namespace std;

int main() {
    string arr[] = {"1", "2", "6", "24", "120", "720", "5040", "40320", "362880", "3628800", "39916800", "479001600",
                    "6227020800", "87178291200", "1307674368000", "20922789888000", "355687428096000",
                    "6402373705728000", "121645100408832000", "2432902008176640000"};
    int m, n;
    cin >> m;
    for (int i = 0; i < m; ++i) {
        cin >> n;
        cout << arr[n - 1] << endl;
    }
    return 0;
}

发表于 2019-09-21 21:55:30 回复(0)
#include <stdio.h>
using namespace std;

long long lwq(int n){
    if(n==1)
        return n;
    return n*lwq(n-1);
}

int main(){
    int m,n;
    while(scanf("%d",&m)!=EOF){
        for(int i = 0;i<m;i++){
            scanf("%d",&n);
            printf("%lld\n",lwq(n));
        }
    }
    
    return 0;
}
20以内也得用朗朗
发表于 2019-09-09 13:18:45 回复(0)
天天想着用数组存放大数,一到实际做题还是胆小
#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int a[n];
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    long long k=1;
    for(int i=0;i<n;i++)
    {
        k=1;
        for(int j=1;j<=a[i];j++)
        {
            k=k*j;
        }
        printf("%lld\n",k);
    }
}


发表于 2019-08-30 16:27:53 回复(0)
    理解题目意思很重要!!!!!
题目意思是:输入两个数,第一个数是要计算多少个数的阶乘,第二个是算这个数的阶乘的数
举例:输入 1 3,输出一次:3!;输入2 3,先输出3!,然后再次输入一个数n,再输出n!

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        while(m>0){
            long n = sc.nextInt();
            long result = 1;
            for (int i = 1; i <= n; i++) {
                result *= i;
            }
            System.out.println(result);
            m--;
        }
    }
}

编辑于 2019-05-24 15:25:41 回复(0)
#include<iostream>
using namespace std;
int main()
{
    int m;
    cin>>m;
    for(int i=0;i<m;++i)
    {
        int n;
        long long sum=1;
        cin>>n;
        for(int j=1;j<=n;++j)
            sum*=j;
        cout<<sum<<endl;
    }
    return 0;
}

发表于 2019-04-29 10:11:37 回复(0)
#include <iostream>
using namespace std;

long fabs(int n)
{
    long long sum = 1;
    if(n<2)
        sum=1;
    else
       sum = n*fabs(n-1);
    return sum;
}

int main()
{
    int m,n; 
    //cout<<"请先输入行数";
    cin>>m;
    //cout<<"请再输入一个1-20之间的整数";
    while(m--)
    {
        cin>>n;
        cout<<fabs(n)<<endl;
    }
    system("pause");
    return 0;
}
发表于 2019-04-03 21:02:43 回复(0)
//运行时间为6ms,占用内存476k
#include<iostream>
using namespace std;
int main(){
    int m;
    int n;
    cin>>m;
    while(m--){
        cin>>n;
        if(n<1||n>20)
            break;
        long long multi=1;//必须用长整型
        for(int i=1;i<=n;i++){
            multi*=i;
        }
        cout<<multi<<endl;
    }
}

发表于 2019-03-30 23:00:08 回复(0)

问题信息

上传者:小小
难度:
36条回答 4406浏览

热门推荐

通过挑战的用户

查看代码