您的位置:首页 > 其它

hdu1066Last non-zero Digit in N!

2016-04-10 17:17 288 查看

题目

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1066

数据很大,超过10^100,字符串处理

代码

#include<iostream>
#include<cstdio>
#include<cstring>
//#include<vector>
#include<algorithm>

#ifdef L_JUDGE
#pragma warning(disable:4996)
#endif

using namespace std;

int t1[]={1,1,2,6,4,2,2,4,2,8};
int t2[]={6,6,2,6,4,4,4,8,4,6};
int circ[]={6,8,4,2};

int F(char* str){
int len=strlen(str);
if(len<2){
return t1[str[0]-'0'];
}
int num[1000];
for(int i=0,j=len-1;i<len;i++,j--){
num[j]=str[i]-'0';
}

int res=1;
while(len>1){
int k=num[0];
//%calculate n/5;
int carry=0;
for(int i=0;i<len;i++){
num[i]=num[i]*2+carry;
carry=num[i]/10;
num[i]%=10;
}
num[len]=carry;
for(int i=0;i<len;i++){
num[i]=num[i+1];
}
while(num[len-1]==0)
len--;

int temp=(num[0]+10*num[1]);
for(int i=0;i<4;i++){
if(circ[i]==t2[k]){
res=(res*circ[(i+temp)%4])%10;
break;
}
}
}
res=res*t1[num[0]];
res%=10;
return res;
}

int main(){
#ifdef L_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
char s[1000];
while(EOF!=scanf("%s",s)){
printf("%d\n",F(s));
}

#ifdef L_JUDGE
fclose(stdin);
fclose(stdout);
system("out.txt");
#endif

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