2012.10.3 阶乘问题(fact.pas/in/out)

来源:互联网 发布:win qt 串口编程 编辑:程序博客网 时间:2024/05/15 23:46

第2题  阶乘问题(fact.pas/in/out)

 

    也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如:

    12! = 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 = 479,001,600

12的阶乘最右边的非零位为6。

    写一个程序,计算N(1<=N<=50,000,000)阶乘的最右边的非零位的值。

注意:10,000,000!有2499999个零。

 

输入
仅一行包含一个正整数N
 
输出
单独一行包含一个整数表示最右边的非零位的值。
 
样例
fact.in
12
 
fact.out

6

 

#include <cstdio>#include <iostream>using namespace std;//20207//1 2 6 4 2 2 4 2 8 8 8 6 4 8 6 4 /*int jie(int x){    int ans=1;    for(int i=1;i<=x;i++)    {            if(i>10)i=i%10;            ans*=i;            if(ans%10==0)ans/=10;            if(ans>10)ans%=10;    }    return ans;}*/int main(){    freopen("fact.in","r",stdin);    freopen("fact.out","w",stdout);    int n;    scanf("%d",&n);    /*for(int i=1;i<=100;i++)    {            printf("i=%d %d\n",i,jie(i));    }*/    int ans=1;    //printf("see:20/10=%d\n",20/10);    for(int i=1;i<=n;i++)    {            //printf("i=%d\n",i);            int y=i;            //if(y>10)y%=10;            while(1)            {                    if(y%10==0)y/=10;                    else                    {                        break;                    }            }            //printf("i==%d\n",y);            ans*=y;            //printf("q:%d\n",ans);            while(1)            {                    if(ans%10==0)ans/=10;                    else                    {                        break;                    }            }            if(ans%10==0)ans/=10;            if(ans>10)ans%=10;            //printf("h:%d\n",ans);            //printf("\n");    }    printf("%d\n",ans);}



原创粉丝点击