• Factorials 3.2


    求阶乘的最后一位非零整数。开始天真无鞋,以为只取最后非零位累成即可.然后自然出错

    官方解释,可能存在xx12*xxx5,如果只取最后非零位累乘...2*5=10 mode 10 ==1 ,这样两个数十位上的就被忽略了...

    大概是这个意思。然后解题思路是,10全部是由2*5产生的,即使是10本身也是2*5,所以只要去掉累乘中的所有2,5对就好了

    而2出现的概率远大于5,用数组arry[n]保存1到n,然后每个数mod5 直到因子5全部被剔除 ,同时记录剔除的个数m,

    然后再对更新后的arry[n]剔除m个2(记住除多除少了)这样就不会产生10了.

    在取最后一位累乘即可. 看似简单,本菜真想不出来了

     1 /*
     2 
     3 ID: hubiao cave
     4 
     5 PROG: fact4
     6 
     7 LANG: C++
     8 
     9 */
    10 
    11 
    12 
    13 
    14 #include<iostream>
    15 
    16 #include<fstream>
    17 
    18 #include<string>
    19 
    20 using namespace std;
    21 
    22 
    23 
    24 int main()
    25 
    26 {
    27 
    28     ifstream fin("fact4.in");
    29     ofstream fout("fact4.out");
    30 
    31     int m[4300];
    32     int n,time=0;
    33     int ans=1;
    34     fin>>n;
    35 
    36     for(int i=1;i<=n;i++)
    37     {
    38         m[i]=i;
    39         while(m[i]%5==0)
    40         {
    41             time++;
    42             m[i]/=5;
    43         }
    44     }
    45     
    46     for(int i=1;i<=n;i++)
    47     {
    48         while(m[i]%2==0&&time>0)
    49         {
    50             m[i]/=2;
    51             time--;
    52         }
    53     }
    54 
    55     for(int i=1;i<=n;i++)
    56         ans=ans*m[i]%10;
    57     fout<<ans<<endl;
    58     return 0;
    59 
    60 
    61 }
  • 相关阅读:
    格式化字符串漏洞利用实战之 0ctf-easyprintf
    java多线程机制中的Thread和Runnable()区别
    Eclipse中部署Android开发环境插件安装问题方案
    java接口实现
    Visual Studio UML
    java子类继承关系
    Visual Studio UML类图
    java方法重载和重写
    javaSocket笔记
    python网络爬虫笔记(九)
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3344813.html
Copyright © 2020-2023  润新知