HDU 1042 N!(万进制思想求阶乘)

Description:

Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!

Input:

One N in one line, process to the end of file.

Output:

For each N, output N! in one line.

Sample Input:

1
2
3

Sample Output:

1
2
6

题目链接

数的阶乘计算起来可能会很大,通常会因为爆数据范围无法存储,万进制求阶乘就是用一个结果数组存阶乘结果,数组中每一个元素只记录结果的四位数,这样结果就可以很好的保存了。
思路:对n从1开始求阶乘,如果结果大于10000则将大于的部分在前一个res数组元素中保存,以此类推用
res计算阶乘结果。输出的时候最左边的四个数单独输出,后面的每个4位数如果前几位为0则需要在前面补零补齐4位输出。

AC代码:

#include <stdio.h>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <iomanip>
#include <cctype>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <cstdlib>

using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;

int res[10010];
int n;

void Solve() {
    int Book = 1;
    int BaoFour = 0;
    res[Book] = 1;
    for (int i = 1;i <= n;++i) {
        BaoFour = 0;
        for (int j = 1;j <= Book;++j) {
            res[j] = res[j] * i + BaoFour;
            BaoFour = res[j] / 10000;
            res[j] = res[j] % 10000;
        }
        if (BaoFour > 0) {
            res[++Book] += BaoFour;
        }
    }
    cout << res[Book];
    for (int i = Book - 1;i > 0;--i) {
        if (res[i] >= 1000) {
            cout << res[i];
        }
        else if (res[i] >= 100) {
            printf("0%d",res[i]);
        }
        else if (res[i] >= 10) {
            printf("00%d",res[i]);
        }
        else {
            printf("000%d",res[i]);
        }
    }
    cout << endl;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    while (cin >> n) {
        mem(res, 0);
        Solve();
    }
    return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
正在热议
# 牛客帮帮团来啦!有问必答 #
1150049次浏览 17146人参与
# 通信和硬件还有转码的必要吗 #
11160次浏览 101人参与
# 不去互联网可以去金融科技 #
20160次浏览 255人参与
# 和牛牛一起刷题打卡 #
18728次浏览 1634人参与
# 实习与准备秋招该如何平衡 #
203226次浏览 3625人参与
# 大厂无回复,继续等待还是奔赴小厂 #
4918次浏览 30人参与
# OPPO开奖 #
19142次浏览 267人参与
# 通信硬件薪资爆料 #
265786次浏览 2484人参与
# 国企是理工四大天坑的最好选择吗 #
2196次浏览 34人参与
# 互联网公司评价 #
97606次浏览 1279人参与
# 简历无回复,你会继续海投还是优化再投? #
25021次浏览 354人参与
# 0offer是寒冬太冷还是我太菜 #
454697次浏览 5123人参与
# 国企和大厂硬件兄弟怎么选? #
53874次浏览 1012人参与
# 参加过提前批的机械人,你们还参加秋招么 #
14628次浏览 349人参与
# 硬件人的简历怎么写 #
82278次浏览 852人参与
# 面试被问第一学历差时该怎么回答 #
19373次浏览 213人参与
# 你见过最离谱的招聘要求是什么? #
27902次浏览 247人参与
# 学历对求职的影响 #
161171次浏览 1804人参与
# 你收到了团子的OC了吗 #
538553次浏览 6386人参与
# 你已经投递多少份简历了 #
344027次浏览 4963人参与
# 实习生应该准时下班吗 #
96928次浏览 722人参与
# 听劝,我这个简历该怎么改? #
63505次浏览 622人参与
牛客网
牛客企业服务