首页 > 试题广场 >

N的阶乘

[编程题]N的阶乘
  • 热度指数:25280 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
 输入一个正整数N,输出N的阶乘。

输入描述:
正整数N(0<=N<=1000)


输出描述:
 输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
示例1

输入

4
5
15

输出

24
120
1307674368000
import java.util.Scanner;
import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            BigInteger fac = new BigInteger("1");
            for (int i = 2; i <= n; i++)
                fac = fac.multiply(new BigInteger(String.valueOf(i)));
            System.out.println(fac);
        }
    }
}

发表于 2024-01-29 20:59:26 回复(0)

C++大数处理不会,也不想学,因为一般高校研究生面试都是提供Java这种语言的,所以想过上机,直接学习Java的大数这一章节的内容就可以了,其他的题目依旧选择熟悉的C++处理,美滋滋

import java.util.*;
import java.math.*;
public class Main{
    public static void main(String [] args){
        Scanner cin=new Scanner(System.in);
        while(cin.hasNext()){
            int a=cin.nextInt();
            BigInteger ans=new BigInteger("1");
            for(int i=1;i<=a;i++){
                ans=ans.multiply(BigInteger.valueOf(i));
            }
            System.out.println(ans);
        }
    }
}
发表于 2020-04-10 15:50:51 回复(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);
        while (scanner.hasNext()){
            int n = scanner.nextInt();
            BigInteger i = new BigInteger("1");
            for (int j = 1; j <= n; j++) i=i.multiply(new BigInteger(String.valueOf(j)));
            System.out.println(i);
        }
    }
}




发表于 2020-03-18 11:27:49 回复(0)
import java.util.*;
import java.math.*;
public class Main{
    public static void main(String args[])
    {
        BigInteger a=BigInteger.valueOf(1);
        int i;
        Scanner cin=new Scanner(System.in);
        while(cin.hasNextInt())
        {
            int n;
            n=cin.nextInt();
            for(i=1;i<=n;i++)
            {
                a=a.multiply(BigInteger.valueOf(i));
            }
            System.out.println(a);
        }
    }
}

发表于 2019-01-11 17:09:04 回复(0)
大数乘法,开个数组模拟乘法过程,但是数组最前面是个位数,然后是十位数等等,所以最后输出结果需要逆序输出。由于n不大于1000,直接和每位相乘不会溢出,就偷懒没切割成单个数字,最好也是把它变成数组相乘
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        while (reader.hasNext()) {
            ArrayList<Integer> res = new ArrayList<>();
            res.add(1);
            int N = reader.nextInt();
            int prod;
            for (int i = 1; i <= N; ++i) {
                int carry = 0;
                for (int j = 0; j < res.size(); ++j) {
                    prod = i * res.get(j) + carry;
                    carry = (prod / 10);
                    res.set(j, prod % 10);
                }
                while (carry > 0) {
                    res.add(carry%10);
                    carry /= 10;
                }
                    
                
            }
            StringBuilder sb = new StringBuilder();
            for (int i = res.size() - 1; i >= 0; --i)
                sb.append(res.get(i));
            System.out.println(sb.toString());
        }
    }
}

发表于 2018-03-29 00:02:22 回复(0)

问题信息

难度:
6条回答 19998浏览

热门推荐

通过挑战的用户

查看代码
N的阶乘