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 <cstring>

#define maxn 10000*5+5

int a[maxn] = {0 , 1} ; //a[0] == 0 , a[1] == 1 , a[n] == 0 ;
int len  ;
int n ; 

void solve(int num ){
    int up = 0 ;
    for(int i=1 ; i<=len ; i++){
        up = a[i] * num + up ; //
        a[i] = up % 10000 ; //求出当前万进制的数字
        up = up / 10000 ; // 当前万进制数字进位
    }
    if(up != 0){//每次乘数结束后存在进位  才会增加万进制数的长度
        a[++len] = up ;
    }
}

int main(){
    while(~scanf("%d" , &n)){
        len = 1 ;
        for(int i=1 ; i<=n ; i++){
            solve(i) ;
        }

        printf("%d" , a[len]) ;
        for(int i=len - 1 ; i>0 ; i--){
            printf("%04d", a[i]) ;
        }
        printf("\n") ;
    }
    return 0 ;
}
时间: 2024-10-25 20:28:19

1057 N的阶乘(51NOD基础题)的相关文章

1058 N的阶乘的长度(51NOD基础题)

1058 N的阶乘的长度(51NOD基础题) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. Input 输入N(1 <= N <= 10^6) Output 输出N的阶乘的长度 Input示例 6 Output示例 3 /* n! 的长度 len = (int)log10(n!) + 1 ; -->> len = log10(1) + log10(2) + .... + log1

1012 最小公倍数LCM(51NOD基础题)

1012 最小公倍数LCM(51NOD基础题) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入2个正整数A,B,求A与B的最小公倍数. Input 2个数A,B,中间用空格隔开.(1<= A,B <= 10^9) Output 输出A与B的最小公倍数. Input示例 30 105 Output示例 210 #include <cstdio> #define LL long long LL n , m ; LL result ; // 递归实现辗

1011 最大公约数GCD(51NOD基础题)

1011 最大公约数GCD(51NOD基础题) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入2个正整数A,B,求A与B的最大公约数. Input 2个数A,B,中间用空格隔开.(1<= A,B <= 10^9) Output 输出A与B的最大公约数. Input示例 30 105 Output示例 15 /* <1> 循环实现 辗转相除法 <2> 递归实现 辗转相除法 */ #include <cstdio> #defi

1008 N的阶乘 mod P(51NOD基础题)

1008 N的阶乘 mod P(51NOD) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入N和P(P为质数),求N! Mod P = ? (Mod 就是求模 %) 例如:n = 10, P = 11,10! = 3628800 3628800 % 11 = 10 Input 两个数N,P,中间用空格隔开.(N < 10000, P < 10^9) Output 输出N! mod P的结果. Input示例 10 11 Output示例 10 #includ

51nod基础题感触(1005大数加法)

这篇就作为算法学习这块的第一篇文章啦!之前一直想来写一下博客来着,但是自己太懒了,建模比赛后想多休息(玩)一会儿(很长时间),一直没写.最近总算是下定决定了! “的确是要开始写一写最近自己做题的感受了!”(超认真的!) 直入正题!(由于才正式开始学习,理解有不足之处还请指正!) 首先,遇到这样的题,如果不限制语言的话,抱着能快则快的心态,我们就用强大的Python就行了.实现起来也是十分地的简单,在这里,我就直接上代码啦!(这里我用的是Python3.6) a=input()#输入,这时候的a实

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代码:

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 #

小试牛刀3之JavaScript基础题

JavaScript基础题 1.让用户输入两个数字,然后输出相加的结果. *prompt() 方法用于显示可提示用户进行输入的对话框. 语法: prompt(text,defaultText) 说明: 如果用户单击提示框的取消按钮,则返回 null.如果用户单击确认按钮,则返回输入字段当前显示的文本. 在用户点击确定按钮或取消按钮把对话框关闭之前,它将阻止用户对浏览器的所有输入.在调用 prompt() 时,将暂停对 JavaScript 代码的执行,在用户作出响应之前,不会执行下一条语句. *

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 =