1057 N的阶乘 【数论】

1057 N的阶乘

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题

 收藏

 关注

输入N求N的阶乘的准确值。

Input

输入N(1 <= N <= 10000)

Output

输出N的阶乘

Input示例

5

Output示例

120模拟平时int类型对10取余进位,输出还需要注意格式,%013lld是不足13位左补0.
#include<stdio.h>
#define mod 10000000000000
#define N 1000010
#define LL long long
LL num[N];

int main()
{
    LL i,j,n;
    LL k,ans,t;
    while(scanf("%lld",&n)!=EOF)
    {
        ans = 1;
        num[1] = 1;
        for(i = 1; i <= n; i ++)
        {
            k = 0;
            for(j = 1; j <= ans; j ++)
            {
                t = num[j]*i + k;
                num[j] = t%mod;
                k = t/mod;//k保存进位数
            }
            if(k)//如果最后还需要进位
                num[++ans] = k;
        }
        printf("%lld",num[ans]);
        for(i = ans-1; i >= 1; i --)
            printf("%013lld",num[i]);
        printf("\n");
    }
    return 0;
}
时间: 2024-10-10 05:48:38

1057 N的阶乘 【数论】的相关文章

1057 N的阶乘

1057 N的阶乘 基准时间限制:1 秒 空间限制:131072 KB 输入N求N的阶乘的准确值. Input 输入N(1 <= N <= 10000) Output 输出N的阶乘 Input示例 5 Output示例 120 import java.math.BigInteger; import java.util.Scanner; public class Main { static BigInteger ans(BigInteger a,int b){ BigInteger anss=B

1057 N的阶乘(51NOD基础题)

1057 N的阶乘(51NOD基础题) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入N求N的阶乘的准确值. Input 输入N(1 <= N <= 10000) Output 输出N的阶乘 Input示例 5 Output示例 120 思路:由于最终结果比较大正常的 LL 肯定是不行的 , 所以仿照 10 进制数 构造出 10000 进制数 , 对万进制数的操作仿照十进制 #include <cstdio> #include <cstri

1057 N的阶乘(大数运算)

题目链接:51nod 1057 N的阶乘 1 #include<cstdio> 2 using namespace std; 3 typedef long long ll; 4 const int N = 10000; 5 const int mod = 1e8; 6 ll a[N] = {1}; 7 int n; 8 int main(){ 9 int i, j, c, cnt; 10 scanf("%d", &n); 11 cnt = 1; 12 for(j =

51 Nod 1057 N的阶乘【Java大数乱搞】

1057 N的阶乘 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入N求N的阶乘的准确值. Input 输入N(1 <= N <= 10000) Output 输出N的阶乘 Input示例 5 Output示例 120 题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1057 分析:学了简单的Java,就来体验了一波Java的爽感,Java大法真的好啊! 下面给出AC代码:

51nod 1057 N的阶乘 (大数运算)

输入N求N的阶乘的准确值. Input 输入N(1 <= N <= 10000) Output 输出N的阶乘 Input示例 5 Output示例 120 压位: 每个数组元素存多位数字 1 #include <cstdio> 2 #include <string> 3 #include <cstring> 4 #include <algorithm> 5 #include <iostream> 6 #include <cmat

51nod 1057 N的阶乘

题目传送门 大数的乘法. 对这个超级大的数进行了切分,具体切成多宽的看个人爱好,只要能够用几个数据类型装下来就好,这里我们划分成了8个的宽度,每八位存一下,最后再进行格式化输出,巧妙的避开了爆数据范围的问题.c和进位相关,m和切的段数相关. 1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6

51nod_1003 阶乘后面0的数量(求N!中5的个数,数论)

题意: n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 720,720后面有1个0. Input 一个数N(1 <= N <= 10^9) OutPut 输出0的数量 思路: 一个0只能由2*5得到.统计N!中2的个数和5的个数,取少的.即求N!中5的个数.[数论:[N/5]+[N/5^2]+[N/5^3]+[N/5^4]+....]{也自己分析也可以得出此结论} 代码: int main(){ int n; cin >> n; ll ans=0; ll tmp

洛谷P1134 阶乘问题[数论]

题目描述 也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如: 12! = 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 = 479,001,600 12的阶乘最右边的非零位为6. 写一个程序,计算N(1<=N<=50,000,000)阶乘的最右边的非零位的值. 注意:10,000,000!有2499999个零. 输入输出格式 输入格式: 仅一行包含一个正整数N. 输出格式: 单独一行包含一个整数表示最右边的非零位的值. 输入输出样例

HNNU 11658 阶乘除法【湖南省第十一届大学生计算机程序设计竞赛,数论】

原题链接:http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11658&courseid=0 刚开始想到"暴力",后来发现int只能保存到12!,而__int64也只能到保存到20多的阶乘, 后来发现,两个阶乘相除约分后为几个连续自然数相乘的形式,后来还是TLE,最后发现,只有1是Impossible 其他的都可以找到.优化一下循环可以过. 还有一种方法,从sqrt(n)开始向前面枚举. AC