题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1594
直接上代码,此题直接当作模题就好了,感觉不怎么好理解。看了几遍,还是不太能理解。先放这里吧。
吉林大学模版:
#include<bits/stdc++.h>
#define maxn 10010
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};
int a[maxn];
int lastdigit(char *s){
int len=strlen(s);
if(len==1) return mod[s[0]-'0'];
for(int i=0;i<len;i++) a[i]=s[len-1-i]-'0';
int res=1;
while(len){
res=res*mod[a[1]%2*10+a[0]]%5;
for(int i=len-1,j=0;i>=0;i--)
j=j*10+a[i],a[i]=j/5,j%=5;
len-=!a[len-1];
}
return res+res%2*5;
}
char s[maxn];
int main(){
int T;cin>>T;
while(T--){
scanf("%s",s);
cout<<lastdigit(s)<<endl;
}
return 0;
}