zoukankan      html  css  js  c++  java
  • P0505

      算法训练 P0505  
    时间限制:1.0s   内存限制:256.0MB
        
      一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积。阶乘的增长速度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中;而35!就更大了,它已经无法存放在一个浮点型变量中。因此,当n比较大时,去计算n!是非常困难的。幸运的是,在本题中,我们的任务不是去计算n!,而是去计算n!最右边的那个非0的数字是多少。例如,5!=1*2*3*4*5=120,因此5!最右边的那个非0的数字是2。再如,7!=5040,因此7!最右边的那个非0的数字是4。再如,15!= 1307674368000,因此15!最右边的那个非0的数字是8。请编写一个程序,输入一个整数n(0<n<=100),然后输出n!最右边的那个非0的数字是多少。
    输入:
      7
    输出:
      4
     
     
     
     1 #include <iostream>
     2 using namespace std;
     3 //分析:决定末尾数字为0的就是2和5 
     4 int main(){
     5     long long int n;
     6     cin >> n;
     7     long long a = 0;//用来记录2的个数 
     8     long long b = 0;//用来记录5的个数 
     9     long long ans = 1;//用来记录个位非0数字 
    10     for(int i = 1; i < n + 1; i++){
    11         int t = i;
    12         while(t % 2 == 0){//将2过滤 
    13             a++;
    14             t /= 2; 
    15         }
    16         while(t % 5 == 0){//将5过滤 
    17             b++;
    18             t /= 5;
    19         }
    20         if(t){
    21             ans *= t;
    22         }
    23         ans %= 10; 
    24     } 
    25     if(a > b){
    26         switch((a - b) % 4){ //找到规律能被2整除的数
    27         //2,4,6,8,10,12...个位数字依次是0,2,4,6,8)周期性出现 
    28             case 0: ans *= 6;break;//如果多出4个2那就是2的4次等于16取个位那就是6 
    29             case 1: ans *= 2;break;
    30             case 2: ans *= 4;break;
    31             case 3: ans *= 8;break;
    32             default: break;
    33         }
    34     }else if (a < b){
    35         //处理多出来的5
    36         //不管有多少5乘积的个位数字都是5 
    37          ans *= 5;
    38         
    39     }
    40     ans %= 10;
    41     cout << ans << endl; 
    42     return 0;
    43 } 
  • 相关阅读:
    mybatis中&gt;=和&lt;=的实现方式
    沙盒
    华硕 X201E 拆机
    延迟满足
    文本输入框自适应高度
    Qt实战之酷狗音乐
    协议栈处理中的conntrack HASH查找/Bloom过滤/CACHE查找/大包与小包/分层处理风格
    【processing】小代码3
    【processing】小代码2
    【processing】小代码
  • 原文地址:https://www.cnblogs.com/AGoodDay/p/10554210.html
Copyright © 2011-2022 走看看