zoukankan      html  css  js  c++  java
  • 蓝桥杯 阶乘末尾 模拟

    问题描述
      给定n和len,输出n!末尾len位。
    输入格式
      一行两个正整数n和len。
    输出格式
      一行一个字符串,表示答案。长度不足用前置零补全。
    样例输入
    6 5
    样例输出
    00720
    数据规模和约定
      n<=30, len<=10。
    基础还是不扎实,调试了好久,一些细节问题没有考虑好,配合测试样例才一步一步改好。
    解题思路:之前做过一个类似的简化版的题目,忘记在哪做的了,以后补上。
    本题既然要输出n!的后len位,那就在求n!的过程中每一步都对10^(len+2)取模。最后将阶乘结果转为字符串,方便加上前导0.
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 ll f(int n) { //返回10的n次方 
     5     ll t = 1;
     6     for (int i = 1; i <= n; i++) {
     7         t *= 10;
     8     }
     9     return t;
    10 }
    11 int main() {
    12     int n, len;
    13     cin >> n >> len;
    14     ll ans = 1;
    15     ll mod = f(len + 2);
    16     for (int i = 1; i <= n; i++) {
    17         ans = (ans % mod * i % mod) % mod;
    18     }
    19     string s = "";
    20     while (ans) {
    21         int t = ans % 10;
    22         s += t + '0';
    23         ans /= 10;
    24     }
    25     s = s.substr(0, len);
    26     reverse(s.begin(), s.end());
    27     while (s.length() < len) {
    28         s = "0" + s;
    29     }
    30     cout << s << endl;
    31     return 0;
    32 }
  • 相关阅读:
    关于等价类测试的简单实践 20150322
    对软件测试的理解 20150314
    pthread_wrap.h
    libuv 错误号UV_ECANCELED 的处理
    简单的后台日志组件
    Windows NTService 后台框架封装
    检查程序进程是否存在/强制杀掉程序进程
    析构函数结束线程测试
    移动天线
    猜数字游戏的Java小程序
  • 原文地址:https://www.cnblogs.com/fx1998/p/12641295.html
Copyright © 2011-2022 走看看