zoukankan      html  css  js  c++  java
  • Luogu P1134 阶乘问题 【数学/乱搞】 By cellur925

    输入输出格式

    输入格式:

    仅一行包含一个正整数 NN 。

    输出格式:

    一个整数,表示最右边的非零位的值。

    输入输出样例

    输入样例#1: 
    12
    输出样例#1: 
    6

    说明

    USACO Training Section 3.2

    毒瘤markdown复制不下来啊qwq。

    这是一道数学题,也可以称为乱搞题。像我这样的蒟蒻见到数论一定先打表。这次打表很顺利。

    用程序跑到了23!,再结合win7的计算器,苟且搞到了25!以内的数据。继续冷静分析。发现除了1!,其他的结果(尾数最靠右且不为0)只可能为2,4,6,8.再略微观察以下,由于求非零的最后一位,所以我们每次都不需保留完整信息,记着两乘数的尾数然后再记录积的尾数即可。结果在5!,15!,25!时,这个法则不适用,乘后积为0,如果放任他们这样,就会gg了。

    那就尝试特判,找出的规律要求我再记下倒数第二位数字是什么。然鹅...沿着这样的思路延续了十几分钟(大概),我再也推不下去了qwq。并没有规律啊...

    于是我打开了tijie,看到大家很少有严格推导证明,都是暴力模拟(?),然而他们打暴力打的还非常有道理。

    好吧,我可能不得不相信,数论题就是在得知少部分结论的基础上乱搞

    ans至少保留8位数字,因为最大的数为8位,所以每次ans%=10改成%=100000000就行了(这句是从题解抄来的)

    然后在注意开ll,最后输出再取个膜就星了。

    code

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cmath>
     4 
     5 using namespace std;
     6 typedef long long ll;
     7 
     8 ll n,pre;
     9 
    10 int main()
    11 {
    12     scanf("%lld",&n);
    13     pre=1;
    14     for(int i=2;i<=n;i++)
    15     {
    16         pre=pre*i;
    17         while(pre%10==0) pre/=10;
    18         pre%=10000000;
    19     }
    20     printf("%lld",pre%10);
    21     return 0;
    22 }
    View Code
  • 相关阅读:
    精益软件度量——实践者的观察与思考读书笔记三
    JS数组操作
    webpack开发环境所需要的插件
    vim 操作
    关于http的npm包
    闭包模式
    一般系统架构的设计
    工作心得
    UML知识
    express源码剖析4
  • 原文地址:https://www.cnblogs.com/nopartyfoucaodong/p/9398567.html
Copyright © 2011-2022 走看看