HDU1066--高精度求阶乘最后非零位
生活随笔
收集整理的這篇文章主要介紹了
HDU1066--高精度求阶乘最后非零位
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:Last non-zero Digit in N!
?
#include<stdio.h> #include<string.h>#define maxn 10001const int mod[20]={1,1,2,6,4,2,2,4,2,8,4,4,8,4,6,8,8,6,8,2};int lastdigit(char buf[]) {int len=strlen(buf),a[maxn],i,c,ret=1;if(len==1)return mod[buf[0]-'0'];for(i=0;i<len;i++)a[i]=buf[len-1-i]-'0';while(len){ret=ret*mod[a[1]%2*10+a[0]]%5;for(c=0,i=len-1;i>=0;i--){c=c*10+a[i],a[i]=c/5,c%=5;}len-=!a[len-1];}return ret+ret%2*5; }int main() {char n[maxn];while(scanf("%s",n)!=EOF){printf("%d\n",lastdigit(n));}return 0; }
?
總結
以上是生活随笔為你收集整理的HDU1066--高精度求阶乘最后非零位的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU4267(2012长春网络赛)
- 下一篇: 区间第K大(划分树)