HDU1066---Last non-zero Digit in N!
2013-08-09 21:45
211 查看
#include<stdio.h> #include<string.h> int s[20]={1,1,2,6,4,2,2,4,2,8,4,4,8,4,6,8,8,6,8,2}; char f[1000]; int a[1000]; int main() { int i,c,t,l; while(scanf("%s",f)!=EOF) { t=1; l=strlen(f); for(i=0;i<l;i++) a[i]=f[l-1-i]-'0'; while(l!=0) { l-=!a[l-1]; t=t*s[a[1]%2*10+a[0]]%10; for(c=0,i=l-1;i>=0;i--) { c=c*10+a[i]; a[i]=c/5; c%=5; } } printf("%d\n",t); } return 0; }
这道题是让你求n的阶乘的最后一位非零数。
因为n阶十分之大,所以就不能直接乘。
但是如果仔细发现,如果最后一位或者几位是0,那么就一定乘以过x个2*5。
所以就直接算出有多少个2*5的因子就好。
把因子算成1,那么就会发现其实末尾的数十分有规律,每20个一个周期,循环往复。
那么程序就好做多了。
相关文章推荐
- hdu1066 Last non-zero Digit in N!
- 数论:HDU1066-Last non-zero Digit in N!
- hdu1066 Last non-zero Digit in N!
- HDU1066 Last non-zero Digit in N!
- hdu1066 Last non-zero Digit in N!
- Last non-zero Digit in N!
- Last non-zero Digit in N!
- hdu 1066 Last non-zero Digit in N!
- HDU ACM 1066 Last non-zero Digit in N!
- hdoj1066 Last non-zero Digit in N!(数论)
- hdu 1066 Last non-zero Digit in N!【阶乘】
- HDOJ 1066-Last non-zero Digit in N!【阶乘最后非零解:模板】
- HDU 1066 Last non-zero Digit in N!
- hdu 1066 Last non-zero Digit in N!【阶乘】
- HDOJ--1066--Last non-zero Digit in N!
- HDU 1066 Last non-zero Digit in N!
- Last non-zero Digit in N!
- HDU 1066 Last non-zero Digit in N!
- hdu 1066 Last non-zero Digit in N! 求N!的最后一位非0数 N很大
- hdu1066——Last non-zero Digit in N!