HDOJ--1066--Last non-zero Digit in N!

#include<stdio.h> #include<string.h> char num[10000]; int main() { while(scanf("%s",num)==1) { int len,i,j,ret,temp,c; len=strlen(num); for(i=0,j=len-1;i<=j;i++,j--) { temp=num[i]-'0'; num[i]=num[j]-'0'; num[j]=temp; } if(len==1) ret=1; else ret=6; while(len) { c=0; for(i=0;i<=num[0];i++) if(i%5!=0) ret*=i; ret%=10; for(i=len-1;i>=0;i--)///////利用字符串进行1位数除法,有点技巧 { c=c*10+num[i]; num[i]=c/5; c=c%5; }/////////////////////////////////// temp=(num[1]*10+num[0])%4; if(temp==0) temp=4;///////////利用最后两位判断,每4次一个循环 for(i=1;i<=temp;i++)////特殊除法 { switch(ret) { case 2: ret=6;break; case 4: ret=2;break; case 6: ret=8;break; case 8: ret=4;break; } } if(num[len-1]==0) len--; } printf("%d/n",ret); } return 0; }

你可能感兴趣的:(HDOJ--1066--Last non-zero Digit in N!)