您的位置:首页 > 其它

hdu 1066 Last non-zero Digit in N!

2012-12-13 02:32 309 查看
这个方法是参考/article/10160196.html 这里的。

证明和推到都在那里面,只是那边最后的代码没有注释和其所说写的又有些出入,所以就贴上我的代码,好理解写

/*

author:jxy

lang:C/C++

university:China,Xidian University

**If you need to reprint,please indicate the source**

*/

#include <iostream>

#include <cstdio>

#include <cstdlib>

#include <cstring>

#include <queue>

#define INF 1E9

using namespace std;

const int mod[20]={1,1,2,6,4,2,2,4,2,8,4,4,8,4,6,8,8,6,8,2};//乘6除2后的规律,每20个一循环,因为循环节一个是10,一个是4

int a[200];

int calc(char *s)

{

int i,len=strlen(s);

if(len==1)return mod[s[0]-'0'];

for(i=0;i<len;i++)

a[i]=s[len-1-i]-'0';

int ans=1,j,c;

for(;len;len-=!a[len-1])//判断第一位是否为0,循环代替递归

{

ans=(ans*mod[(a[1]&1)*10+a[0]])%10;

for(c=0,j=len-1;j>=0;j--)//除5

c=c*10+a[j],a[j]=c/5,c%=5;

}

return ans;

}

int main()

{

char s[200];

while(~scanf("%s",s))

{

printf("%d\n",calc(s));

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: