阶乘的最后一个非0数

#include <iostream>
#include <cstdio>
//阶乘的最后一个非0数
//即去掉因子5,2;计算乘积的个位
//乘积的个位=仅仅对每个数的个位进行乘积,每次都%10即可;连锁起来了
using namespace std;
// int main(){
//     int x,s=0,q=1;
//     cin>>x;
//     for(int i=2;i<=x;i++){
//         int p=i;
//         while (p%5==0)
//         {
//             p=p/5;
//             s++;
//         }
//     }
//     for(int i=2;i<=x;i++){
//         int p=i;
//         while (p%5==0)
//             p=p/5;
//         while (p%2==0&&s>0)
//         {
//             p=p/2;
//             s--;
//         }
//         q=(q*(p%10))%10;
//     }
//     // cout<<s<<endl;
//     cout<<q<<endl;
//     return 0;
// }

//更进一步地,同时对5计数、除以2
//但是这样必须倒着除
int main(){
    int x,s=0,q=1;
    cin>>x;
    for(int i=x;i>=2;i--){
        int p=i;
        while (p%5==0)
        {
            p=p/5;
            s++;
        }
        while (p%2==0&&s>0)
        {
            p=p/2;
            s--;
        }
        q=(q*(p%10))%10;
    }
    cout<<q<<endl;
    return 0;
}

 

posted @ 2020-06-06 21:34  西伯利亚挖土豆  阅读(301)  评论(0编辑  收藏  举报