当前位置: 首页 > news >正文

[蓝桥杯]阶乘求值【省模拟赛】

问题描述

给定 nn,求 n!n! 除以 10000000071000000007 的余数。

其中 n!n! 表示 nn 的阶乘,值为从 11 连乘到 nn 的积,即 n!=1×2×3×…×nn!=1×2×3×…×n。

输入格式

输入一行包含一个整数 nn。

输出格式

输出一行,包含一个整数,表示答案。

样例输入

3

样例输出

6

样例输入

7

样例输出

992

评测用例规模与约定

对于 30% 的评测用例,1≤n≤121≤n≤12。

对于 60% 的评测用例,1≤n≤10001≤n≤1000。

对于所有评测用例,1≤n≤10000001≤n≤1000000。

运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M
Java2s256M
Python33s256M
PyPy33s256M
Go3s256M
JavaScript3s256M

总通过次数: 1801  |  总提交次数: 2084  |  通过率: 86.4%

代码部分:

#include <iostream>
using namespace std;const long long MOD = 1000000007;int main() {int n;cin >> n;  // 输入整数nlong long result = 1;  // 初始化结果为1(0! = 1)// 循环计算阶乘,每一步取模for (int i = 1; i <= n; i++) {result = (result * i) % MOD;}cout << result << endl;  // 输出结果return 0;
}

代码说明:

  1. 输入处理:程序读取一个整数 n

  2. 初始化结果result 初始化为1,因为0的阶乘是1(虽然题目保证n≥1,但初始化仍考虑通用性)。

  3. 循环计算

    • 使用 for 循环从1乘到n。

    • 每一步乘法后立即对 1000000007 取模,防止结果溢出。

  4. 输出结果:最终计算出的 result 即为n! mod 1000000007。

注意事项:

  • 时间复杂度:O(n),对于n=1000000,在现代计算机上可在1秒内完成。

  • 空间复杂度:O(1),仅使用常数额外空间。

  • 数据类型:使用 long long 存储结果,确保中间乘法结果(最大约1e15)不会溢出。

  • 模数选择:严格按题目要求使用模数 1000000007

相关文章:

  • 细说C语言将格式化输出打印至标准输出流的函数 printf、_printf_l、wprintf、_wprintf_l
  • python训练 60天挑战-day41
  • Day41 Python打卡训练营
  • 堆与堆排序及 Top-K 问题解析:从原理到实践
  • 《信号与系统》第 5 章 离散时间傅里叶变换
  • 德拜温度热容推导
  • 如何配置国内docker镜像源?
  • STM32F103通过Zigbee实现多分用户向主用户发送信息
  • 360浏览器设置主题
  • 法规解读——GB/T 前向碰撞预警功能FCW
  • 头歌java课程实验(Java面向对象 - 包装类)
  • 【python】uv管理器
  • 传统液晶瓶颈待破?铁电液晶如何实现显示技术逆袭
  • HomeKit 基本理解
  • 蓝桥杯java2021年十二届国赛大学A组真题答案整理
  • 如何手搓扫雷(待扩展)
  • [SC]SystemC在CPU/GPU验证中的应用(四)
  • JSR 303(即 Bean Validation)是一个通过​​注解在 Java Bean 上定义和执行验证规则​​的规范
  • C++ 的四种强制类型转换:static_cast、dynamic_cast、const_cast 和 reinterpret_cast
  • LXQt修改开始菜单高亮
  • 网站导航条用什么做/重庆网站搭建
  • 珠海网站制作费用/谷歌seo搜索引擎优化
  • 厦门建设局公维金网站/百度top风云榜
  • 扁平化网站模板/软文营销的优势
  • 分类信息网站如何做排名/品牌网络营销策划书
  • 网站宣传有文化事业建设费吗/百度官方首页